در این مطلب، ویدئو Generators in Python – Advanced Python 14 – آموزش برنامه نویسی با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:18:12
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,030 –> 00:00:02,550
سلام به همه به آموزش جدید پایتون خود خوش آمدید
2
00:00:02,550 –> 00:00:04,319
امروز در مورد ژنراتورها صحبت خواهیم کرد
3
00:00:04,319 –> 00:00:07,200
و مولدهای پایتون
4
00:00:07,200 –> 00:00:09,450
توابعی هستند که یک شی را که می
5
00:00:09,450 –> 00:00:12,150
توان دوباره تکرار کرد را برمی گرداند و یک چیز خاص این است
6
00:00:12,150 –> 00:00:14,309
که آنها آیتم های داخل
7
00:00:14,309 –> 00:00:17,220
شی را با تنبلی تولید می کنند به این معنی که
8
00:00:17,220 –> 00:00:19,800
موارد را تولید می کنند. فقط یکی در یک زمان و فقط
9
00:00:19,800 –> 00:00:22,410
زمانی که شما آن را درخواست می کنید و به همین
10
00:00:22,410 –> 00:00:24,420
دلیل نسبت به سایر اشیاء دنباله ای کارآمدتر از حافظه هستند،
11
00:00:24,420 –> 00:00:26,279
زمانی که
12
00:00:26,279 –> 00:00:28,800
باید با مجموعه داده های بزرگ سر و کار داشته باشید، آنها یک
13
00:00:28,800 –> 00:00:31,260
تکنیک پیشرفته پیشرفته پایتون هستند، بنابراین
14
00:00:31,260 –> 00:00:33,030
بیایید به چند نمونه نگاهی بیندازیم. برای
15
00:00:33,030 –> 00:00:36,030
درک اینکه چگونه کار می کنند، یک ژنراتور
16
00:00:36,030 –> 00:00:38,340
مانند یک تابع عادی تعریف می شود، اما
17
00:00:38,340 –> 00:00:40,559
به جای کلمه کلیدی بازگشت، یک کلمه کلیدی سال
18
00:00:40,559 –> 00:00:43,980
تعریف می شود، بنابراین بیایید تابعی تعریف کنیم که
19
00:00:43,980 –> 00:00:48,660
آن را مولد من می نامیم و در اینجا می توانم شما را
20
00:00:48,660 –> 00:00:52,170
برگردانید یا می توانم مقادیری را به دست
21
00:00:52,170 –> 00:00:55,559
بیاورم، بنابراین در اینجا از بازده استفاده می کنم. عبارت و
22
00:00:55,559 –> 00:01:00,059
مقداری به دست میدهد، بنابراین من میخواهم یک را به دست بیاورم و سپس
23
00:01:00,059 –> 00:01:02,309
میتوانم دستورات استفاده چندگانه را
24
00:01:02,309 –> 00:01:04,979
در داخل یک تابع مولد داشته باشم، بنابراین میتوانم به
25
00:01:04,979 –> 00:01:08,100
عنوان مثال دو عدد و سپس بازده
26
00:01:08,100 –> 00:01:11,820
thr داشته باشم. ee و حالا می توانم یک شی مولد ایجاد
27
00:01:11,820 –> 00:01:16,229
کنم تا بتوانم بگویم چی برابر با مولد من است
28
00:01:16,229 –> 00:01:20,340
و حالا اگر این و
29
00:01:20,340 –> 00:01:23,220
این را چاپ کنم فقط چاپ می کند که این یک
30
00:01:23,220 –> 00:01:26,700
شی مولد است و حالا کاری که می توانم انجام دهم
31
00:01:26,700 –> 00:01:29,340
به عنوان مثال می توانم روی این شی حلقه
32
00:01:29,340 –> 00:01:34,350
بزنم پس من می توانم برای I به چی بگویم و سپس
33
00:01:34,350 –> 00:01:38,130
مقدار را چاپ می کنم بنابراین این یک
34
00:01:38,130 –> 00:01:41,400
دو و سه چاپ می کند و همچنین می توانم
35
00:01:41,400 –> 00:01:44,310
مقادیر را یکی یکی با تابع بعدی دریافت
36
00:01:44,310 –> 00:01:50,430
کنم تا بتوانم بگویم مقدار برابر با G بعدی است
37
00:01:50,430 –> 00:01:56,670
و سپس می توانم مقدار را چاپ کنم. بنابراین این
38
00:01:56,670 –> 00:01:59,909
یک را چاپ می کند و این
39
00:01:59,909 –> 00:02:03,180
تابع را اجرا می کند و اجرا می شود تا زمانی که
40
00:02:03,180 –> 00:02:06,479
به اولین عبارت جوانی برسد و در اینجا
41
00:02:06,479 –> 00:02:11,340
مقدار را برمی گرداند و در این خط مکث می کند
42
00:02:11,340 –> 00:02:12,990
43
00:02:12,990 –> 00:02:16,110
بنابراین دفعه بعد اگر بخواهم دوباره مقدار بعدی
44
00:02:16,110 –> 00:02:19,440
را با این تابع بعدی دریافت کنم.
45
00:02:19,440 –> 00:02:23,040
دوباره میگویم مقدار برابر با چی بعدی است،
46
00:02:23,040 –> 00:02:26,610
سپس اینجا ادامه مییابد و تا
47
00:02:26,610 –> 00:02:29,880
عبارت Youth بعدی اجرا میشود، بنابراین تا اینجا اجرا میشود
48
00:02:29,880 –> 00:02:35,010
و به اینجا بازمیگردد و مکث میکند، بنابراین
49
00:02:35,010 –> 00:02:38,520
اگر اکنون این را اجرا کنم 1 و 2 را چاپ میکند
50
00:02:38,520 –> 00:02:41,250
و اگر دوباره این کار را انجام دهم، پس از آن
51
00:02:41,250 –> 00:02:44,880
هم برمیگرده و 3 رو چاپ میکنه و حالا چی
52
00:02:44,880 –> 00:02:48,140
میشه اگر بخواهم برای بار چهارم آن را اجرا کنم،
53
00:02:48,140 –> 00:02:51,390
حالا اگر آن را اجرا کنم، این یک تکرار توقف را افزایش می دهد
54
00:02:51,390 –> 00:02:54,120
زیرا یک
55
00:02:54,120 –> 00:02:56,430
شی مولد اگر به عبارت جوان دیگری نرسد، همیشه یک تکرار توقف را افزایش می دهد،
56
00:02:56,430 –> 00:02:58,650
57
00:02:58,650 –> 00:03:02,750
بنابراین بله،
58
00:03:02,750 –> 00:03:06,150
ژنراتورها اینگونه کار می کنند و شما می توانید همچنین به
59
00:03:06,150 –> 00:03:08,760
عنوان مثال از آنها به عنوان ورودی برای سایر
60
00:03:08,760 –> 00:03:12,030
توابع استفاده کنید که تکرار شونده می گیرند، به
61
00:03:12,030 –> 00:03:15,510
عنوان مثال تابع مجموع داخلی
62
00:03:15,510 –> 00:03:19,320
یک تکرارپذیر می گیرد، بنابراین من می توانم
63
00:03:19,320 –> 00:03:23,040
شی مولد را در اینجا بدهم و می توانم آن را چاپ کنم تا
64
00:03:23,040 –> 00:03:28,440
1 به علاوه 2 به اضافه 3 برابر با 6 یا 6 محاسبه شود.
65
00:03:28,440 –> 00:03:32,090
به عنوان مثال می توانم از
66
00:03:32,090 –> 00:03:37,440
متد و sorted داخلی استفاده کنم و
67
00:03:37,440 –> 00:03:41,310
شی مولد را در اینجا قرار دهم، بنابراین این
68
00:03:41,310 –> 00:03:45,360
یک لیست جدید با تمام اشیاء به ترتیب مرتب شده ایجاد می کند و برمی گرداند،
69
00:03:45,360 –> 00:03:50,070
به
70
00:03:50,070 –> 00:03:51,690
عنوان مثال اگر من آن را
71
00:03:51,690 –> 00:03:56,940
برعکس داشته باشم 3 2 1 و سپس با این می توانم
72
00:03:56,940 –> 00:04:01,970
دوباره آن را مرتب کنم و سپس 1 2 و 3 را چاپ می کند
73
00:04:01,970 –> 00:04:06,110
و حالا بیایید
74
00:04:06,110 –> 00:04:08,910
دوباره اجرای یک تابع ژنراتور را از نزدیک ببینیم،
75
00:04:08,910 –> 00:04:12,450
بنابراین فرض کنید من یک ژنراتور دیگر
76
00:04:12,450 –> 00:04:18,048
دارم و من آن را شمارش معکوس می نامم و یک مقدار طول می کشد.
77
00:04:18,048 –> 00:04:22,140
شماره شروع و سپس من می گویم اول از
78
00:04:22,140 –> 00:04:26,310
همه می خواهم چاپ شروع کنم
79
00:04:26,310 –> 00:04:31,889
و سپس می گویم در حالی که num بزرگتر از
80
00:04:31,889 –> 00:04:38,280
صفر است، num را به دست می دهم و سپس می
81
00:04:38,280 –> 00:04:42,020
خواهم اعدادی را که می گویم num – برابر 1 به روز کنم
82
00:04:42,020 –> 00:04:47,639
و سپس شی مولد خود را ایجاد می کنم
83
00:04:47,639 –> 00:04:52,860
بنابراین می گویم CD. برابر است با شمارش معکوس و
84
00:04:52,860 –> 00:04:58,020
به عنوان مثال من می خواهم از 4 شروع کنم و حالا
85
00:04:58,020 –> 00:05:02,240
اگر اجازه بدهم اول از همه این را اجرا کنم و
86
00:05:02,240 –> 00:05:06,000
متوجه شوم که از اینجا چاپ نمی
87
00:05:06,000 –> 00:05:09,540
شود بنابراین هیچ چیزی در اینجا اجرا نمی شود
88
00:05:09,540 –> 00:05:13,950
و اکنون اولین بار که می خواهم
89
00:05:13,950 –> 00:05:17,780
اولین مقدار را با اجازه بگیرم
90
00:05:17,780 –> 00:05:22,430
91
00:05:22,430 –> 00:05:27,270
اگر این را اجرا کنم اکنون
92
00:05:27,270 –> 00:05:29,630
از ابتدای این تابع
93
00:05:29,630 –> 00:05:32,910
شروع می شود
94
00:05:32,910 –> 00:05:36,120
و آن را اجرا می کند، پس از شروع چاپ می شود و سپس اجرا می شود تا
95
00:05:36,120 –> 00:05:39,870
به اولین عبارت بازدهی برسد و در اینجا باز
96
00:05:39,870 –> 00:05:44,130
خواهد گشت. عدد و روی این عبارت متوقف می شود،
97
00:05:44,130 –> 00:05:49,229
بنابراین من هم می توانم مقدار
98
00:05:49,229 –> 00:05:54,840
را چاپ کنم و سپس 4 را چاپ می کند و دفعه بعد
99
00:05:54,840 –> 00:05:59,280
که می خواهم دوباره اینجا را
100
00:05:59,280 –> 00:06:05,000
با این عبارت بعدی ادامه دهم، مثلاً
101
00:06:05,150 –> 00:06:10,590
چاپ کنید، سی دی بعدی را چاپ کنید، سپس در اینجا ادامه می یابد،
102
00:06:10,590 –> 00:06:13,770
آن را به خاطر می سپارم. در
103
00:06:13,770 –> 00:06:17,729
حالت فعلی، عدد فعلی 4 است، سپس عدد را به
104
00:06:17,729 –> 00:06:20,610
روز می کند، حالا عدد 3 است،
105
00:06:20,610 –> 00:06:23,669
سپس در حلقه while ادامه می دهد
106
00:06:23,669 –> 00:06:25,919
و سپس دوباره در این خط متوقف می شود
107
00:06:25,919 –> 00:06:31,710
و اکنون 3 را برمی گرداند، بنابراین اگر
108
00:06:31,710 –> 00:06:34,409
من این را اجرا کنم، این نیز خواهد بود. print 3 و
109
00:06:34,409 –> 00:06:36,930
سپس دوباره حالت را به خاطر می آورد
110
00:06:36,930 –> 00:06:38,700
و دفعه بعد که ادامه می دهم
111
00:06:38,700 –> 00:06:40,050
از اینجا ادامه می دهد
112
00:06:40,050 –> 00:06:43,259
و به همین ترتیب و دوباره اگر این را
113
00:06:43,259 –> 00:06:47,699
چند بار اجرا کنم پس دوباره اگر بعدی را چاپ
114
00:06:47,699 –> 00:06:50,520
کنم و همچنین چاپ خواهد شد و اکنون نیز چاپ
115
00:06:50,520 –> 00:06:53,699
می شود یکی را چاپ کنید و اکنون
116
00:06:53,699 –> 00:06:57,500
تکرار توقف را افزایش می دهد، بنابراین این
117
00:06:57,500 –> 00:07:01,530
اجرا با جزئیات است و اکنون اجازه دهید به
118
00:07:01,530 –> 00:07:04,199
مزیت بزرگ ژنراتور نگاهی بیندازیم،
119
00:07:04,199 –> 00:07:08,520
بنابراین همانطور که گفتم یک حافظه بسیار کارآمد برای ما ایجاد می کنیم
120
00:07:08,520 –> 00:07:12,150
تا هنگام کار با آن، مقدار زیادی از حافظه ذخیره شود.
121
00:07:12,150 –> 00:07:18,539
داده های بزرگ، پس به
122
00:07:18,539 –> 00:07:22,620
این معنی است که اجازه دهید به یک مثال نگاهی بیندازیم
123
00:07:22,620 –> 00:07:26,699
، فرض کنید من می خواهم یک تابع
124
00:07:26,699 –> 00:07:30,389
ابتدا آن را n فراخوانی کند و یک عدد را به عنوان
125
00:07:30,389 –> 00:07:34,949
ورودی می گیرد و این یک دنباله
126
00:07:34,949 –> 00:07:38,940
با تمام اعدادی که از 0 شروع
127
00:07:38,940 –> 00:07:42,930
می شود تا n را باز می گرداند. بنابراین معمولاً کاری
128
00:07:42,930 –> 00:07:46,770
که انجام می دهید این است که a ایجاد کنید لیست call it
129
00:07:46,770 –> 00:07:51,870
numbs برابر با یک لیست خالی است، سپس شما نیز
130
00:07:51,870 –> 00:07:56,310
می گویید num برابر 0 است، بنابراین این شماره شروع شما است
131
00:07:56,310 –> 00:08:01,800
و سپس می گویید در حالی که num
132
00:08:01,800 –> 00:08:08,520
کوچکتر از n num است stop append num،
133
00:08:08,520 –> 00:08:13,310
بنابراین شماره فعلی را به لیست خود اضافه
134
00:08:13,310 –> 00:08:16,949
می کنید سپس شماره فعلی را به روز می کنید. بنابراین
135
00