در این مطلب، ویدئو آموزش تخصصی پایتون شماره 4 – دکوراتورها با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:16:16
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,000 –> 00:00:01,650
سلام به همه و به آموزش تخصصی پایتون ما خوش آمدید،
2
00:00:01,650 –> 00:00:03,720
بنابراین در
3
00:00:03,720 –> 00:00:05,130
ویدیوی امروز ما در مورد دکوراتورها صحبت خواهیم کرد
4
00:00:05,130 –> 00:00:06,960
که ابزار بسیار جالب و
5
00:00:06,960 –> 00:00:09,059
مفیدی هستند، آنها فوق العاده پیچیده
6
00:00:09,059 –> 00:00:11,370
نیستند، اما اساسا به ما اجازه می دهند
7
00:00:11,370 –> 00:00:13,679
تا رفتار یک تابع را بدون
8
00:00:13,679 –> 00:00:15,839
در واقع تغییر دهیم. اکنون تغییر هر کدام از کدهای
9
00:00:15,839 –> 00:00:17,730
آن مفید است زیرا گاهی اوقات
10
00:00:17,730 –> 00:00:19,020
می خواهید
11
00:00:19,020 –> 00:00:21,630
هنگام اشکال زدایی یک تابع، دکوراتورها را اضافه و حذف کنید یا
12
00:00:21,630 –> 00:00:24,029
شاید می خواهید رفتار
13
00:00:24,029 –> 00:00:25,529
همه عملکردهای خود را تغییر دهید و به جای
14
00:00:25,529 –> 00:00:27,000
اینکه وارد شوید و همه کدها را تغییر
15
00:00:27,000 –> 00:00:29,760
دهید. می تواند یک دکوراتور ایجاد کند که
16
00:00:29,760 –> 00:00:31,560
به شما این امکان را می دهد که به سادگی می دانید از یک
17
00:00:31,560 –> 00:00:33,719
خط کد برای تغییر رفتار
18
00:00:33,719 –> 00:00:35,399
همه این توابع مختلف استفاده کنید، بنابراین من به
19
00:00:35,399 –> 00:00:36,870
شما نشان خواهم داد که چگونه این کار می کند و
20
00:00:36,870 –> 00:00:38,730
در واقع یک دکوراتور برای شروع با
21
00:00:38,730 –> 00:00:40,230
کمی مرور کردن چیست. نوعی خلاصه
22
00:00:40,230 –> 00:00:42,960
از نحوه عبور پایتون از اشیاء به اطراف و
23
00:00:42,960 –> 00:00:45,180
اینکه چرا ما در واقع میتوانیم حتی از دکوراتور استفاده کنیم، یک
24
00:00:45,180 –> 00:00:46,920
یادآوری سریع قبل از شروع
25
00:00:46,920 –> 00:00:49,289
این است که بادبادک حامی این سری
26
00:00:49,289 –> 00:00:51,300
بادبادک است. بهترین تکمیل خودکار هوش مصنوعی برای
27
00:00:51,300 –> 00:00:52,920
پایتون موجود در بازار است و می توانید آن را
28
00:00:52,920 –> 00:00:54,629
به صورت رایگان در پیوندی که در توضیحات
29
00:00:54,629 –> 00:00:56,550
آن با تمام
30
00:00:56,550 –> 00:00:59,129
شناسه های محبوب و ویرایشگرهای متن ادغام شده
31
00:00:59,129 –> 00:01:01,800
32
00:01:01,800 –> 00:01:04,019
است، دریافت کنید. دوباره
33
00:01:04,019 –> 00:01:05,400
میتوانید آن را از لینک
34
00:01:05,400 –> 00:01:06,869
در توضیحات دانلود کنید، بنابراین اولین کاری که میخواهم
35
00:01:06,869 –> 00:01:08,159
انجام دهم این است که یک
36
00:01:08,159 –> 00:01:10,530
تابع به نام func ایجاد میکنیم، اکنون کاری که میخواهم
37
00:01:10,530 –> 00:01:12,270
انجام دهم این است که فقط به شما نشان دهم که اگر این
38
00:01:12,270 –> 00:01:14,880
تابع یک رشته را بگیرد، در واقع میتوانم
39
00:01:14,880 –> 00:01:16,530
تابع دیگری را در اینجا برگردانید
40
00:01:16,530 –> 00:01:18,810
که با این آرگومان کاری انجام می دهد و
41
00:01:18,810 –> 00:01:20,400
ما قبلاً این را در آموزش های قبلی متخصص پایتون دیده بودیم،
42
00:01:20,400 –> 00:01:22,170
اما من می خواهم
43
00:01:22,170 –> 00:01:23,369
این را کاملاً در مورد نحوه
44
00:01:23,369 –> 00:01:24,869
کارکرد آن توضیح دهم بنابراین من این تابع را یک
45
00:01:24,869 –> 00:01:26,880
wrapper می نامم زیرا داخل آن است. از این
46
00:01:26,880 –> 00:01:29,250
تابع، چیزی به عنوان آرگومان در نظر گرفته نمیشود
47
00:01:29,250 –> 00:01:30,990
و کاری که من در اینجا انجام میدهم این
48
00:01:30,990 –> 00:01:38,700
است که یک رشته چاپ شروع شده
49
00:01:38,700 –> 00:01:43,079
و چاپ به همین شکل در صورتحساب سرمایه به پایان میرسد
50
00:01:43,079 –> 00:01:45,390
و من حدس میزنم در واقع این رشته
51
00:01:45,390 –> 00:01:47,009
متأسفانه نیازی ندارد. برای قرار گرفتن در یک رشته
52
00:01:47,009 –> 00:01:48,479
باید اینطور باشد، بنابراین متغیر را چاپ می
53
00:01:48,479 –> 00:01:49,860
کنیم و سپس کاری که من در اینجا انجام می دهم
54
00:01:49,860 –> 00:01:52,439
این است که تابع wrapper را به این شکل برگردانم،
55
00:01:52,439 –> 00:01:55,200
بنابراین اگر اکنون این کار را انجام دهم،
56
00:01:55,200 –> 00:01:57,509
اگر بگویم x برابر است با تابع مانند آن چه اتفاقی می افتد
57
00:01:57,509 –> 00:01:59,310
و من رشته ام را
58
00:01:59,310 –> 00:02:01,829
گذاشتم بیایید سلام بگویم و این برنامه را اجرا
59
00:02:01,829 –> 00:02:05,280
می کنم، می توانید ببینید که سلام شروع می کنیم و
60
00:02:05,280 –> 00:02:08,369
اکنون آن را تمام می کنیم، دلیل این اتفاق این است
61
00:02:08,369 –> 00:02:10,500
که ما به اینجا برگردانده ایم که در
62
00:02:10,500 –> 00:02:12,690
حال فراخوانی است، این دو براکت را بنویسید،
63
00:02:12,690 –> 00:02:13,590
اما اگر
64
00:02:13,590 –> 00:02:15,660
این را حذف کنم و این کار را انجام دهم. حالا هیچ اتفاقی نمیافتد،
65
00:02:15,660 –> 00:02:17,849
بنابراین اگر
66
00:02:17,849 –> 00:02:20,790
مقدار x را چاپ کنم همانطور که میبینید عملاً چه کار کردهایم، یک
67
00:02:20,790 –> 00:02:23,610
تابع را در اینجا ذخیره میکنیم که از
68
00:02:23,610 –> 00:02:25,379
این تابع برگردانده شده است که در واقع برابر است
69
00:02:25,379 –> 00:02:27,300
و سپس اگر بخواهیم این
70
00:02:27,300 –> 00:02:30,000
تابع را فراخوانی کنیم، میتوانیم بریس های کوچک خود را
71
00:02:30,000 –> 00:02:32,099
مانند آن قرار دهید و در اینجا ما شروع می کنیم با
72
00:02:32,099 –> 00:02:33,840
سلام و پایان، بنابراین فقط می خواهم به شما نشان دهم
73
00:02:33,840 –> 00:02:35,400
که این امکان پذیر است و دلیل
74
00:02:35,400 –> 00:02:37,170
این امکان این است که توابع در
75
00:02:37,170 –> 00:02:39,870
پایتون اشیایی هستند که به این معنی است که ما
76
00:02:39,870 –> 00:02:41,040
می توانیم آنها را به اطراف منتقل
77
00:02:41,040 –> 00:02:42,690
کنیم و می توانیم پرتاب کنیم. آنها در اطراف حرفه ای ما gram و
78
00:02:42,690 –> 00:02:44,700
میتوانید اینجا را ببینید که این
79
00:02:44,700 –> 00:02:47,010
مکان شیای است که میشناسید تابع wrapper
80
00:02:47,010 –> 00:02:50,880
از محلیهای func dot خوب است، بنابراین حالا که
81
00:02:50,880 –> 00:02:53,069
متوجه شدیم بیایید آن را
82
00:02:53,069 –> 00:02:54,930
کمی بالا بیاوریم و ببینیم اگر
83
00:02:54,930 –> 00:02:56,459
واقعاً به جای ارسال یک
84
00:02:56,459 –> 00:02:59,459
رشته در اینجا یک تابع دیگر را ارسال می
85
00:02:59,459 –> 00:03:01,230
کنم، بنابراین من تابع تابعی را تعریف می کنم که
86
00:03:01,230 –> 00:03:03,540
آن را func می نامم – مانند آن و تمام کاری که ما در اینجا انجام می دهیم
87
00:03:03,540 –> 00:03:06,480
فقط چاپ است یا چیزی می گوید
88
00:03:06,480 –> 00:03:11,579
من func هستم – چرا که نه من از شر این خلاص می شوم
89
00:03:11,579 –> 00:03:13,769
و اکنون بهتر است به جای ارسال یک رشته در
90
00:03:13,769 –> 00:03:16,140
اینجا، چرا ما در واقع فقط یک تابع را فراخوانی نمی کنیم،
91
00:03:16,140 –> 00:03:18,950
بنابراین بیایید f را در اینجا قرار
92
00:03:18,950 –> 00:03:21,389
دهیم، اجازه دهید من func را نمی خواهم – من فقط
93
00:03:21,389 –> 00:03:23,880
F را می خواهم، بیایید هر تابعی را که
94
00:03:23,880 –> 00:03:25,709
فراخوانی می شود، انجام می دهیم تا چاپ شروع شده فراخوانی هر چیزی را انجام دهیم
95
00:03:25,709 –> 00:03:27,540
تابع در اینجا بود و سپس
96
00:03:27,540 –> 00:03:30,090
پرینت به پایان رسید و سپس این
97
00:03:30,090 –> 00:03:32,220
تابع را برگردانید، پس بیایید ببینیم این چگونه کار میکند، بنابراین
98
00:03:32,220 –> 00:03:34,620
حالا اگر بتوانم این را کمی پایین بیاورم،
99
00:03:34,620 –> 00:03:41,519
بگوییم x برابر است با فانک فانک – بیایید X را چاپ کنیم
100
00:03:41,519 –> 00:03:44,400
و سپس X را صدا کنیم، پس چه میکنیم
101
00:03:44,400 –> 00:03:46,169
در اینجا برای هر کسی که گیج شده است
102
00:03:46,169 –> 00:03:47,579
این است که ما این تابع را ایجاد کرده ایم که
103
00:03:47,579 –> 00:03:50,010
a تابعی را بهعنوان یک آرگوماننویس
104
00:03:50,010 –> 00:03:52,380
بهعنوان پارامتر میپذیرد، سپس کاری که در اینجا انجام میدهیم این
105
00:03:52,380 –> 00:03:54,180
است که تابعی را تعریف میکنیم که
106
00:03:54,180 –> 00:03:56,099
فراخوانیهای شروع شده را چاپ میکند و هر تابعی را
107
00:03:56,099 –> 00:03:58,769
که در چاپها ارسال شده است، به پایان میرسد و سپس
108
00:03:58,769 –> 00:04:01,440
این تابع را برمیگرداند، بنابراین
109
00:04:01,440 –> 00:04:03,900
تا زمانی که به این ترتیب فراخوانی نشود، عملاً کاری انجام نخواهد داد.
110
00:04:03,900 –> 00:04:05,940
وقتی این را برگردانیم، آن را در یک
111
00:04:05,940 –> 00:04:08,400
متغیر X ذخیره میکنیم و سپس وقتی میخواهیم از
112
00:04:08,400 –> 00:04:10,650
این تابع داخلی در اینجا استفاده کنیم، آن را
113
00:04:10,650 –> 00:04:13,079
با این نام مینویسیم که X و براکتها را بنویسیم،
114
00:04:13,079 –> 00:04:14,900
بنابراین بیایید نگاهی به نحوه عملکرد این
115
00:04:14,900 –> 00:04:17,668
کنترل B بیندازیم و میتوانید ببینید شروع شد من
116
00:04:17,668 –> 00:04:20,579
func هستم – تابع تابع func wrapper
117
00:04:20,579 –> 00:04:23,250
محلیها درست است و ایده اینجا این است که من
118
00:04:23,250 –> 00:04:25,710
میتوانم همان کار را با say func 3
119
00:04:25,710 –> 00:04:27,420
درست انجام دهم، اگر چاپ
120
00:04:27,420 –> 00:04:32,610
کنم، فرض کنید من فانک 3 هستم،
121
00:04:32,610 –> 00:04:34,410
به جای اینکه فانک را پاس کنم – میتوانم فانک 3 را پاس کنم.
122
00:04:34,410 –> 00:04:36,510
و اکنون میتوانیم ببینیم که
123
00:04:36,510 –> 00:04:38,550
همان اتفاق میافتد به جز فانک 3 و
124
00:04:38,550 –> 00:04:40,620
در واقع میتوانیم آن را انجام دهیم، میدانید که من
125
00:04:40,620 –> 00:04:45,720
میگویم y برابر است با فانک فانک – و سپس میتوانیم
126
00:04:45,720 –> 00:04:47,400
همان کار را انجام دهیم و فقط اینجا دراز بکشیم
127
00:04:47,400 –> 00:04:49,260
و حالا هر دوی آنها را صدا کنیم. می روند سر
128
00:04:49,260 –> 00:04:50,100
کار و هر دو می روند
129
00:04:50,100 –> 00:04:52,590
متفاوت بودن بنابراین شروع کردم من فانک هستم 3 شروع
130
00:04:52,590 –> 00:04:56,010
کردم من برای پایان دادن به آن سرگرم کننده هستم بنابراین با در نظر گرفتن این موضوع
131
00:04:56,010 –> 00:04:57,390
می توانیم شروع کنیم به اینکه یک
132
00:04:57,390 –> 00:04:59,490
دکوراتور در حال حاضر تقریبا چیست اما من فقط می خواهم راهی را
133
00:04:59,490 –> 00:05:00,900
به شما نشان دهم که فرض کنید
134
00:05:00,900 –> 00:05:02,520
این عملکرد را می دانید درست در اینجا که
135
00:05:02,520 –> 00:05:04,410
ما می خواهیم دکوراتور خود را صدا کنیم،
136
00:05:04,410 –> 00:05:06,630
نمی خواهیم این فراخوانی عجیب را درست
137
00:05:06,630 –> 00:05:08,730
در جایی که از تابع تزئین کننده خود برای
138
00:05:08,730 –> 00:05:10,620
فراخوانی تابع 3 استفاده می کنیم، انجام دهیم، فقط می خواهیم
139
00:05:10,620 –> 00:05:13,110
تابع 3 را فراخوانی کنیم و از آن بخواهیم این رفتار
140
00:05:13,110 –> 00:05:16,380
را انجام دهد. هر تابع 3
141
00:05:16,380 –> 00:05:18,720
درست است چگونه آن را به کار ببریم چگونه
142
00:05:18,720 –> 00:05:20,010
توانستیم آن را در جایی که
143
00:05:20,010 –> 00:05:22,740
من مجبور به فراخوانی فانک و پاس فانک 3
144
00:05:22,740 –> 00:05:26,100
و فراخوانی فانک و پاس فانک باشم – چگونه می
145
00:05:26,100 –> 00:05:26,730
توانیم این کار را به روش دیگری به
146
00:05:26,730 –> 00:05:29,520
خوبی انجام دهیم که در واقع می توانم do یک
147
00:05:29,520 –> 00:05:31,620
خط ابلهانه جالب اینجاست پایتون جایی که من این کار را انجام
148
00:05:31,620 –> 00:05:36,840
میدهم، میگویم فانک 3 برابر است با فانک در
149
00:05:36,840 –> 00:05:40,350
فانک 3، اکنون این یک خط کد عجیب به نظر میرسد،
150
00:05:40,350 –> 00:05:41,670
اما اساساً چیزی که
151
00:05:41,670 –> 00:05:43,980
اکنون به ما اجازه میدهد انجام دهیم این
152
00:05:43,980 –> 00:05:46,290
است که برای فراخوانی تابع و عبور دادن
153
00:05:46,290 –> 00:05:48,810
فانک 3 به داخل ما در واقع می توانیم از فانک 3
154
00:05:48,810 –> 00:05:51,960
که یک va است استفاده کنیم riable now که
155
00:05:51,960 –> 00:05:54,240
تابعی را که از فراخوانی فانک برگردانده میشود
156
00:05:54,240 –> 00:05:57,870
با تابع 3 ذخیره میکند، به این معنی که
157
00:05:57,870 –> 00:06:02,100
اگر ما funk 3 را مانند آن فراخوانی کنیم،
158
00:06:02,100 –> 00:06:03,750
اتفاقی که میافتد این است که این
159
00:06:03,750 –> 00:06:05,880
تابعی که از این فراخوانی ایجاد شده است را اجرا میکند،
160
00:06:05,880 –> 00:06:07,920
بنابراین این راهی است که ما میتوانیم
161
00:06:07,920 –> 00:06:10,680
آن رفتار را تغییر دهیم، ما میتوانیم بگوییم خوب است، بنابراین
162
00:06:10,680 –> 00:06:12,870
فانک 3 من همیشه آوردهام میخواهم
163
00:06:12,870 –> 00:06:14,430
هر چیزی که در داخل این تابع wrapper
164
00:06:14,430 –> 00:06:16,800
است هر زمان که آن را صدا میزنم اتفاق بیفتد، بنابراین تمام کاری که
165
00:06:16,800 –> 00:06:19,110
باید انجام دهم برای تعریف این است که این
166
00:06:19,110 –> 00:06:20,880
خط کد را بنویسم و حالا هر بار که تماس می
167
00:06:20,880 –> 00:06:22,950
گیرم فانک 3 از هر جایی در برنامه من این
168
00:06:22,950 –> 00:06:24,930
کار را انجام می دهد و اگر این را اجرا کنیم می بینیم
169
00:06:24,930 –> 00:06:27,960
که این اتفاق می افتد و خوب کار می کند،
170
00:06:27,960 –> 00:06:31,080
می توانیم همان کار را با فانک انجام دهیم – بله
171
00:06:31,080 –> 00:06:32,550
سرگرم کننده – برابر است با
172
00:06:32,550 –> 00:06:36,930
فانک – و به آن سرگرمی می گویند –
173
00:06:36,930 –> 00:06:38,730
مانند این است و میتوانیم ببینیم که
174
00:06:38,730 –> 00:06:41,490
برای هر دوی آنها کار میکند، بنابراین اینجاست که ما
175
00:06:41,490 –> 00:06:43,259
اکنون به مفهوم دکوراتور میرسیم،
176
00:06:43,259 –> 00:06:44,460
همه چیز کمی
177
00:06:44,460 –> 00:06:46,680
پیچیدهتر میشود، اما اکنون تنها چیزی که به شما نشان میدهم این
178
00:06:46,680 –> 00:06:48,780
است که یک دکوراتور در مقابل چه کاری انجام میدهد.
179
00:06:48,780 –> 00:06:51,150
ما این نوع خط را انجام داده ایم کد
180
00:06:51,150 –> 00:06:52,919
در اینجا عجیب است درست مثل اینکه چیزی نیست
181
00:06:52,919 –> 00:06:54,300
که شما واقعاً بخواهید بنویسید
182
00:06:54,300 –> 00:06:55,229
، واقعاً نمی دانید آن را کجا
183
00:06:55,229 –> 00:06:57,780
قرار دهید، ایده آل نیست که مجبور
184
00:06:57,780 –> 00:06:59,370
باشید این خط کد را بنویسید، بنابراین
185
00:06:59,370 –> 00:07:02,039
پایتون این را برای ما و آنچه که آنها انجام داده اند فکر کرده است.
186
00:07:02,039 –> 00:07:03,900
معرفی شده، نحوی است که اساساً
187
00:07:03,900 –> 00:07:06,180
به ما امکان میدهد این کار را به روشی بهتر
188
00:07:06,180 –> 00:07:08,520
انجام دهیم و تمام آن استفاده از این علامت @
189
00:07:08,520 –> 00:07:10,349
و قرار دادن نام تابع تزئین شدهتان
190
00:07:10,349 –> 00:07:12,930
به همین شکل در بالا است، بنابراین اکنون
191
00:07:12,930 –> 00:07:16,050
این خط در اینجا تقریباً جایگزین
192
00:07:16,050 –> 00:07:18,780
این خط شده است. مثل اینکه آنها دقیقاً
193
00:07:18,780 –> 00:07:20,940
یک کپی هستند، آنها همان کار را انجام می دهند،
194
00:07:20,940 –> 00:07:22,560
این فقط کمی زیباتر به نظر می رسد و
195
00:07:22,560 –> 00:07:23,880
درک
196
00:07:23,880 –> 00:07:25,440
اینکه چه اتفاقی در حال رخ دادن است کمی راحت تر است وقتی می دانید
197
00:07:25,440 –> 00:07:27,270
که یک دستور دکوراتور بالای
198
00:07:27,270 –> 00:07:29,190
تابع وجود دارد و می توانید
199
00:07:29,190 –> 00:07:30,990
عملکرد خود را با آن تزئین کنید.
200
00:07:30,990 –> 00:07:32,580
اگر می خواهید بیش از یک دکوراتور
201
00:07:32,580 –> 00:07:34,319
در حال حاضر در مورد آن صحبت نمی کنیم، اما این چیزی است که
202
00:07:34,319 –> 00:07:36,000
باید به آن توجه داشته باشید تا
203
00:07:36,000 –> 00:07:37,860
جایگزین این خطوط کد شود، تنها کاری که
204
00:07:37,860 –> 00:07:40,020
باید انجام دهم این است که نام تابعی را
205
00:07:40,020 –> 00:07:43,259
که می خواهم اجرا کنم قرار دهم. قبل از سمت راست و
206
00:07:43,259 –> 00:07:45,840
سپس اگر من Func 3 و Func 2 را انجام دهم، می
207
00:07:45,840 –> 00:07:47,729
بینیم که همان چیزی را دریافت می کنیم، بنابراین شروع
208
00:07:47,729 –> 00:07:49,469
209
00:07:49,469 –> 00:07:52,110
210
00:07:52,110 –> 00:07:53,669
می کنیم یک تابع تزئینی
211
00:07:53,669 –> 00:07:55,080
باید به نوعی
212
00:07:55,080 –> 00:07:57,060
این عملکرد wrapper را پیاده سازی کنید که در آن
213
00:07:57,060 –> 00:08:00,030
اولین چیز خود تابع را می گیرد
214
00:08:00,030 –> 00:08:02,729
و تابع دوم در اینجا در حالی که این
215
00:08:02,729 –> 00:08:04,740
فقط تابع یا این را می گیرد و این
216
00:08:04,740 –> 00:08:06,090
تابعی را ایجاد می کند
217
00:08:06,090 –> 00:08:08,820
که زمانی که این به درستی برگردانده شود یا زمانی که به درستی برگردانده شود فراخوانی می شود.
218
00:08:08,820 –> 00:08:10,289
شما در واقع این تابع را فراخوانی میکنید،
219
00:08:10,289 –> 00:08:11,699
بنابراین در وا