در این مطلب، ویدئو آموزش پایتون برای مبتدیان 49 – دکوراتورهای پایتون با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,060 –> 00:00:02,220
سلام بچه ها به ویدیوی بعدی در پایتون خوش آمدید
2
00:00:02,220 –> 00:00:04,470
تا ابزاری برای مبتدیان در این
3
00:00:04,470 –> 00:00:05,879
4
00:00:05,879 –> 00:00:09,150
5
00:00:09,150 –> 00:00:11,219
6
00:00:11,219 –> 00:00:14,040
7
00:00:14,040 –> 00:00:16,020
ویدیو به شما پیشنهاد می کنم
8
00:00:16,020 –> 00:00:18,510
دو ویدیوی آخر را که در آنها در
9
00:00:18,510 –> 00:00:20,939
مورد اصول
10
00:00:20,939 –> 00:00:23,880
برنامه نویسی تابعی در پایتون صحبت کرده ام تماشا کنید، پس بیایید
11
00:00:23,880 –> 00:00:27,449
با دکوراتورها شروع کنیم، بنابراین اول از
12
00:00:27,449 –> 00:00:30,990
همه دکوراتورها چیست تا
13
00:00:30,990 –> 00:00:36,000
دکوراتورها یک تابع را بپیچند و رفتار آن را
14
00:00:36,000 –> 00:00:40,920
به یک شکل تغییر دهند. بدون تغییر
15
00:00:40,920 –> 00:00:44,719
کد منبع تابع واقعی،
16
00:00:44,719 –> 00:00:48,660
بنابراین بیایید در عمل ببینیم که چگونه دکوراتورها را اعلام کرده
17
00:00:48,660 –> 00:00:52,289
و از آنها استفاده کنیم، بنابراین اول از همه کاری
18
00:00:52,289 –> 00:00:54,270
که می خواهم انجام دهم این است که یک
19
00:00:54,270 –> 00:00:58,020
روش بسیار ساده را تعریف می کنم و آن را نام می برم.
20
00:00:58,020 –> 00:01:01,920
به عنوان مثال سلام، که
21
00:01:01,920 –> 00:01:05,220
هیچ آرگومانی نمیگیرد و فقط
22
00:01:05,220 –> 00:01:08,700
hello world را چاپ میکند، حالا
23
00:01:08,700 –> 00:01:10,920
فرض کنید میخواهم این تابع را تزئین کنم،
24
00:01:10,920 –> 00:01:14,520
سلام سلام، و میخواهم نوعی
25
00:01:14,520 –> 00:01:17,580
رشته را قبل و بعد از چاپ
26
00:01:17,580 –> 00:01:22,259
hello world wi چاپ کنم. بدون تغییر
27
00:01:22,259 –> 00:01:27,270
کد تابع، بنابراین در اینجا می توانیم آن
28
00:01:27,270 –> 00:01:30,570
دکوراتورها را اعلام کنیم، بنابراین من یک
29
00:01:30,570 –> 00:01:33,270
تابع دکوراتور را برای این تعریف می کنم
30
00:01:33,270 –> 00:01:36,270
و آن را به عنوان تابع زیر خط تزئین کننده نام می برم
31
00:01:36,270 –> 00:01:36,930
32
00:01:36,930 –> 00:01:39,090
و این تابع دکوراتور
33
00:01:39,090 –> 00:01:41,759
یک آرگومان می گیرد و آن این آرگومان
34
00:01:41,759 –> 00:01:44,369
یک تابع خواهد بود اکنون در
35
00:01:44,369 –> 00:01:47,729
ویدیوی آخر دیدیم که می توانیم یک
36
00:01:47,729 –> 00:01:51,840
تابع را از یک تابع برگردانیم یا می توانیم
37
00:01:51,840 –> 00:01:54,960
تابع را به عنوان آرگومان یک تابع دیگر ارسال
38
00:01:54,960 –> 00:01:57,240
کنیم بنابراین در داخل این تابع
39
00:01:57,240 –> 00:01:59,310
یک تابع دیگر را اعلام می کنم و
40
00:01:59,310 –> 00:02:02,790
من من آن را به عنوان
41
00:02:02,790 –> 00:02:05,250
توابع wrapper نام میبرم که هیچ آرگومانی ندارد و
42
00:02:05,250 –> 00:02:07,619
در داخل این تابع wrapper کاری که
43
00:02:07,619 –> 00:02:10,649
میخواهم انجام دهم این است که میخواهم تابعی را فراخوانی کنم
44
00:02:10,649 –> 00:02:13,860
که به عنوان آرگومان
45
00:02:13,860 –> 00:02:16,110
تابع داده دکور ارسال میشود و در نهایت فقط
46
00:02:16,110 –> 00:02:18,180
میخواهم برگردم. این تابع بنابراین
47
00:02:18,180 –> 00:02:20,910
من فقط بازگشت را فراخوانی میکنم و
48
00:02:20,910 –> 00:02:23,070
تابع wrapper را
49
00:02:23,070 –> 00:02:25,770
بدون پرانتز برمیگردانم، بنابراین در مورد
50
00:02:25,770 –> 00:02:29,580
بسته شدن دیدیم که میتوانیم
51
00:02:29,580 –> 00:02:32,430
تابع داخلی را بدون
52
00:02:32,430 –> 00:02:34,860
پرانتز برگردانیم و این باعث میشود آنها
53
00:02:34,860 –> 00:02:36,900
اکنون بسته شده اند، فرض کنید ما می خواهیم
54
00:02:36,900 –> 00:02:39,330
تابع say hello را به عنوان
55
00:02:39,330 –> 00:02:41,640
آرگومان این تابع دکوراتور پاس کنیم و
56
00:02:41,640 –> 00:02:44,670
این تابع در اینجا فراخوانی می شود،
57
00:02:44,670 –> 00:02:46,770
بنابراین برای چاپ چیزی قبل و
58
00:02:46,770 –> 00:02:50,940
بعد از این رشته hello world می توانیم
59
00:02:50,940 –> 00:02:54,300
چیزی را در اینجا نیز چاپ کنیم. ما
60
00:02:54,300 –> 00:02:58,110
فقط میتوانیم بنویسیم، فرض کنیم میخواهیم X
61
00:02:58,110 –> 00:03:01,830
را چاپ کنیم و میخواهیم این X را 20 بار چاپ
62
00:03:01,830 –> 00:03:04,739
کنیم، مثلاً میتوانیم این
63
00:03:04,739 –> 00:03:07,560
نوع نماد را بنویسیم و بعد از اجرای
64
00:03:07,560 –> 00:03:11,310
تابع من میخواهم مثلاً Y 20 x چاپ کنم،
65
00:03:11,310 –> 00:03:13,920
بنابراین این ساده ترین شکل
66
00:03:13,920 –> 00:03:17,190
دکوراتور که تابع را به عنوان
67
00:03:17,190 –> 00:03:21,120
آرگومان در نظر می گیرد، اکنون برای فراخوانی این
68
00:03:21,120 –> 00:03:23,760
تابع say hello با دکوراتور،
69
00:03:23,760 –> 00:03:26,730
یک متغیر را اعلام می کنم
70
00:03:26,730 –> 00:03:29,760
و آن را به عنوان hello نام می برم و سپس
71
00:03:29,760 –> 00:03:32,400
تابع دکوراتور را فراخوانی می کنم. و
72
00:03:32,400 –> 00:03:34,860
من به شما گفتم که این تابع دکوراتور
73
00:03:34,860 –> 00:03:37,350
تابع را به عنوان آرگومان می گیرد، بنابراین
74
00:03:37,350 –> 00:03:39,900
می توانیم تابع say hello را به عنوان
75
00:03:39,900 –> 00:03:42,959
آرگومان به این تابع دکوراتور
76
00:03:42,959 –> 00:03:46,470
منتقل کنیم که در اینجا ارسال می شود و
77
00:03:46,470 –> 00:03:48,810
اکنون در آخرین ویدیو در حدوداً اینجا فراخوانی می شود.
78
00:03:48,810 –> 00:03:51,870
در موارد بسته، دیدیم که
79
00:03:51,870 –> 00:03:54,239
چون این تابع decorator در حال
80
00:03:54,239 –> 00:03:57,390
برگرداندن تابع داخلی است، به این معنی است که
81
00:03:57,390 –> 00:04:00,720
این متغیر حاوی تابع داخلی خواهد بود،
82
00:04:00,720 –> 00:04:04,890
بنابراین میتوانیم این hello را با
83
00:04:04,890 –> 00:04:07,350
این پرانتز صدا کنیم و چون این
84
00:04:07,350 –> 00:04:09,000
تابع wrapper هیچ
85
00:04:09,000 –> 00:04:11,850
آرگومانی نمیگیرد تا بتوانیم آن را فراخوانی کنیم. به این صورت
86
00:04:11,850 –> 00:04:14,130
و بیایید کد را اجرا کنیم و ببینیم چه
87
00:04:14,130 –> 00:04:16,649
اتفاقی میافتد، بنابراین وقتی کد را اجرا میکنیم،
88
00:04:16,649 –> 00:04:20,700
میتوانید قبل از رشته hello world
89
00:04:20,700 –> 00:04:25,620
، X 20 x و بعد از hello
90
00:04:25,620 –> 00:04:27,540
world
91
00:04:27,540 –> 00:04:31,350
I را بیست بار چاپ کردهایم، بنابراین این یک شکل ساده
92
00:04:31,350 –> 00:04:34,280
از decorator و به این صورت است که می توانید از
93
00:04:34,280 –> 00:04:37,440
دکوراتورها در پایتون استفاده کنید، اما
94
00:04:37,440 –> 00:04:40,560
پایتون راه ساده ای را برای بیان این نوع نمادگذاری نیز ارائه می دهد،
95
00:04:40,560 –> 00:04:44,790
بنابراین به جای
96
00:04:44,790 –> 00:04:46,920
استفاده از این خط کد،
97
00:04:46,920 –> 00:04:51,450
این خط کد و همچنین این
98
00:04:51,450 –> 00:04:54,180
خط کد را نظر خواهم داد زیرا در عوض برای انجام این کار،
99
00:04:54,180 –> 00:04:56,220
می توانید از این نوع نمادگذاری استفاده کنید،
100
00:04:56,220 –> 00:05:00,000
بنابراین درست بالای تابع خود که در آن می
101
00:05:00,000 –> 00:05:02,970
خواهید دکوراتور مورد استفاده خود
102
00:05:02,970 –> 00:05:06,120
را با نماد نرخ اعمال کنید و سپس نام
103
00:05:06,120 –> 00:05:08,730
تزئین کننده ای را که می خواهید اعمال کنید.
104
00:05:08,730 –> 00:05:11,310
تابع و این علامت بالای
105
00:05:11,310 –> 00:05:14,760
تابع معادل این نوع
106
00:05:14,760 –> 00:05:16,710
نمادگذاری است و اکنون می توانیم مستقیماً از
107
00:05:16,710 –> 00:05:20,310
این تابع استفاده کنیم سلام بدون استفاده
108
00:05:20,310 –> 00:05:24,600
از این دو خط کد، بنابراین اجازه دهید
109
00:05:24,600 –> 00:05:26,520
یک بار دیگر کد را اجرا کنم و ببینیم چه
110
00:05:26,520 –> 00:05:27,030
می شود
111
00:05:27,030 –> 00:05:30,570
و نتیجه
112
00:05:30,570 –> 00:05:33,270
دکوراتور به همین صورت است، بنابراین اجازه
113
00:05:33,270 –> 00:05:35,730
دهید یک بار دیگر تعریف را مرور کنیم تا
114
00:05:35,730 –> 00:05:40,080
دکوراتورها عملکرد را بپیچند و
115
00:05:40,080 –> 00:05:43,730
رفتار آن را
116
00:05:43,730 –> 00:05:48,240
بدون تغییر کد واقعی
117
00:05:48,240 –> 00:05:50,940
تابع تغییر دهند تا این دکوراتور
118
00:05:50,940 –> 00:05:54,450
رفتار این تابع را تغییر دهد.
119
00:05:54,450 –> 00:05:58,680
حتی بدون تغییر کد واقعی این
120
00:05:58,680 –> 00:06:00,810
تابع، اکنون یک سوال که ممکن
121
00:06:00,810 –> 00:06:03,900
است در اینجا مطرح شود این است که آیا میتوانیم از بیش از یک
122
00:06:03,900 –> 00:06:07,800
دکوراتور با عملکرد یکسان استفاده کنیم، بنابراین
123
00:06:07,800 –> 00:06:10,200
بیایید سعی کنیم دو تابع دکوراتور را
124
00:06:10,200 –> 00:06:12,540
تعریف کنیم، بنابراین ما میخواهیم دو
125
00:06:12,540 –> 00:06:15,210
تابع دکوراتور و این تابع دکوراتور را
126
00:06:15,210 –> 00:06:16,950
تعریف کنیم. من آن را به عنوان
127
00:06:16,950 –> 00:06:19,890
دکوراتور X و تابع دوم
128
00:06:19,890 –> 00:06:22,110
را به عنوان دکوراتور y نام گذاری می کنم،
129
00:06:22,110 –> 00:06:25,350
بنابراین اولین تابع تزئین کننده قرار
130
00:06:25,350 –> 00:06:28,800
است تزئین کند. تابع شما با مقدار x
131
00:06:28,800 –> 00:06:31,590
و دکوراتور دوم
132
00:06:31,590 –> 00:06:34,710
تابع شما را با مقدار Y تزیین می کند،
133
00:06:34,710 –> 00:06:37,560
بنابراین ما می خواهیم آن را با Y جایگزین کنیم
134
00:06:37,560 –> 00:06:40,830
اکنون در بالای تابع
135
00:06:40,830 –> 00:06:44,790
شما می توانید از تزئین کننده X استفاده کنید و سپس
136
00:06:44,790 –> 00:06:48,480
می توانید از دکوراتور Y در بالا استفاده کنید.
137
00:06:48,480 –> 00:06:50,670
بنابراین من فقط با
138
00:06:50,670 –> 00:06:54,230
سرعت دکوراتور Y می نویسم و این نماد کا
139
00:06:54,230 –> 00:06:55,740
لاً خوب است، بن
140
00:06:55,740 –> 00:06:58,050
براین می توانید از یک یا چند تزئین کننده با
141
00:06:58,050 –> 00:07:01,230
ک تابع استفاده کنید، بنابراین اجازه دهید من کد را اجرا کنم و ب
142
00:07:01,230 –> 00:07:02,730
ینیم چه اتفاقی می افتد من این را
143
00:07:02,730 –> 00:07:05,010
جرا می کنم کد کنید و میتوانید ببینید
144
00:07:05,010 –> 00:07:08,670
چه اتفاقی میافتد، بنابراین اول از همه،
145
00:07:08,670 –> 00:07:12,720
دکوراتور Y تابع را با Y پیچیده میکند
146
00:07:12,720 –> 00:07:16,410
و بعد از آن دکوراتور X میآید
147
00:07:16,410 –> 00:07:18,990
که
148
00:07:18,990 –> 00:07:23,040
تابع را با مقادیر X تزئین کرده است و سپس
149
00:07:23,040 –> 00:07:25,890
رشته واقعی شما چاپ میشود که سلام
150
00:07:25,890 –> 00:07:29,220
دنیا حالا یک چیز است. توجه داشته باشید که در اینجا
151
00:07:29,220 –> 00:07:32,490
ترتیب آن دکوراتور است که در
152
00:07:32,490 –> 00:07:35,510
آن استفاده می شود، بنابراین اکنون ما سعی می کنیم فقط
153
00:07:35,510 –> 00:07:39,660
مکان های دکوراتور x
154
00:07:39,660 –> 00:07:42,000
و y را عوض کنیم و حالا بیایید کد را اجرا کنیم و
155
00:07:42,000 –> 00:07:44,610
ببینیم چه اتفاقی می افتد بنابراین قبل از اینکه
156
00:07:44,610 –> 00:07:47,760
ابتدا y چاپ شود و سپس چاپ شود. X زمانی که از
157
00:07:47,760 –> 00:07:51,000
این دکوراتور در بالا استفاده می شد و
158
00:07:51,000 –> 00:07:53,610
سپس از دکوراتور X استفاده می شد و اکنون
159
00:07:53,610 –> 00:07:56,310
وقتی کد را اجرا می کنیم،
160
00:07:56,310 –> 00:07:58,800
اگر می خواهید
161
00:07:58,800 –> 00:08:02,010
نماد معادل این را با استفاده از
162
00:08:02,010 –> 00:08:04,110
دکوراتورها ببینید، برعکس این اتفاق خواهد افتاد، بنابراین من فقط
163
00:08:04,110 –> 00:08:07,170
این دکوراتورها را از اینجا کامنت کنید و بیایید سعی
164
00:08:07,170 –> 00:08:09,240
کنیم از این نوع نمادگذاری با
165
00:08:09,240 –> 00:08:11,160
دکوراتورهایمان استفاده کنیم، بنابراین من فقط
166
00:08:11,160 –> 00:08:13,740
این کد را لغو نظر می کنم و این بار کاری
167
00:08:13,740 –> 00:08:16,550
که می خواهم انجام دهم این است که از این
168
00:08:16,550 –> 00:08:21,060
دکوراتور x با جمله استفاده می کنم. سلام و من
169
00:08:21,060 –> 00:08:25,050
قصد دارم این نماد را داخل
170
00:08:25,050 –> 00:08:28,770
آن تزئین کننده Y قرار دهم تا بتوانم از این
171
00:08:28,770 –> 00:08:31,650
نوع نمادگذاری که معادل این
172
00:08:31,650 –> 00:08:34,049
نوع نماد است استفاده کنم، بنابراین می خواهم
173
00:08:34,049 –> 00:08:36,380
کد را اجرا کنم و می توانید ببینید زیرا
174
00:08:36,380 –> 00:08:40,289
تزئین کننده Y بیرونی ترین است. دکوراتور
175
00:08:40,289 –> 00:08:43,320
در اینجا فقط مقدار y را چاپ می کند
176
00:08:43,320 –> 00:08:46,110
و سپس دکوراتور X را
177
00:08:46,110 –> 00:08:48,000
داریم که مقدار x را چاپ می کند
178
00:08:48,000 –> 00:08:50,940
و سپس رشته واقعی ما را اگر
179
00:08:50,940 –> 00:08:53,910
جای دکوراتور
180
00:08:53,910 –> 00:08:54,510
X
181
00:08:54,510 –> 00:08:59,540
و دکوراتور را با هم عوض کنیم، چرا ترتیب
182
00:08:59,540 –> 00:09:02,460
چاپ خواهد شد. همچنین تغییر بنابراین در حال حاضر این
183
00:09:02,460 –> 00:09:05,790
t بود او مثال دکوراتور بسیار ابتدایی است، بنابراین
184
00:09:05,790 –> 00:09:09,330
اجازه دهید این مثال را حذف کنم و
185
00:09:09,330 –> 00:09:11,700
اجازه دهید یک مثال دیگر برای شما ارائه کنم، بنابراین به جای
186
00:09:11,700 –> 00:09:14,220
استفاده از این تابع، اجازه دهید یک مثال دیگر برای شما ارائه دهم،
187
00:09:14,220 –> 00:09:16,410
بنابراین من می خواهم
188
00:09:16,410 –> 00:09:17,600
تابعی به نام
189
00:09:17,600 –> 00:09:20,520
تقسیم را اعلام کنم که دو
190
00:09:20,520 –> 00:09:23,970
آرگومان می گیرد. فرض کنید x و y و کاری
191
00:09:23,970 –> 00:09:26,220
که قرار است انجام دهد این است که
192
00:09:26,220 –> 00:09:30,540
مقدار تقسیم X
193
00:09:30,540 –> 00:09:34,590
بر Y را برمی گرداند و اجازه دهید این تزئینات را
194
00:09:34,590 –> 00:09:36,840
از اینجا حذف کنم، بنابراین در آخرین
195
00:09:36,840 –> 00:09:39,870
مثال سلام بر روی تابع say hello
196
00:09:39,870 –> 00:09:42,780
هیچ آرگومانی نمی گرفت. و اکنون
197
00:09:42,780 –> 00:09:46,680
تابع تقسیم خود را به آرگومانها
198
00:09:46,680 –> 00:09:49,230
میدهیم که به این معنی است که باید تابع wrapper
199
00:09:49,230 –> 00:09:51,780
را در اینجا نیز تغییر دهیم، بنابراین من میخواهم
200
00:09:51,780 –> 00:09:54,420
دکوراتور خود را بهعنوان دکوراتور تقسیمشده نام ببرم که
201
00:09:54,420 –> 00:09:57,360
یک تابع میگیرد و من
202
00:09:57,360 –> 00:10:00,510
تابع wrapper را تغییر میدهم و اکنون این
203
00:10:00,510 –> 00:10:02,190
تابع wrapper قرار است دو
204
00:10:02,190 –> 00:10:04,920
مقدار بگیرد که مقدار x و y است شما
205
00:10:04,920 –> 00:10:07,470
همچنین می توانید a و B بنویس