در این مطلب، ویدئو Iterators در مقابل Generators در Python: Data Science Code با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:12:37
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,740 –> 00:00:02,909
سلام به همه، در این ویدیو چطور پیش میرود،
2
00:00:02,909 –> 00:00:04,470
ما به دنبال
3
00:00:04,470 –> 00:00:07,170
راههایی برای سرعت بخشیدن به کد شما هستیم، بنابراین در این
4
00:00:07,170 –> 00:00:08,370
ویدیو کمی بیشتر
5
00:00:08,370 –> 00:00:10,650
علم کامپیوتر II خواهد بود و به
6
00:00:10,650 –> 00:00:13,980
نحوه انجام آن در علوم کامپیوتر نگاه میکنیم، بنابراین
7
00:00:13,980 –> 00:00:15,299
با تکرار من یعنی احتمالاً
8
00:00:15,299 –> 00:00:17,640
با یک حلقه for کلاسیک آشنا هستید و
9
00:00:17,640 –> 00:00:19,980
این یکی از ساده ترین چهار حلقه در
10
00:00:19,980 –> 00:00:22,170
پایتون است، اگر با
11
00:00:22,170 –> 00:00:23,699
پایتون آشنایی ندارید، این را برای شما توضیح می دهم و
12
00:00:23,699 –> 00:00:25,740
درک آن بسیار آسان است، بنابراین
13
00:00:25,740 –> 00:00:29,369
ممکن است این را ببینید. برای من در محدوده n بنابراین n
14
00:00:29,369 –> 00:00:32,640
فقط یک عدد صحیح است، فرض کنید n 5 است، بنابراین
15
00:00:32,640 –> 00:00:35,040
برای I در محدوده n فقط یک مخفف برای
16
00:00:35,040 –> 00:00:39,059
گفتن اجازه دهید من 0 باشم سپس بگذارید 1 2 3
17
00:00:39,059 –> 00:00:41,760
و سپس 4 باشد، بنابراین هر عددی را که در
18
00:00:41,760 –> 00:00:44,190
اینجا وارد کنید، آن را وارد کنید. از 0 به بالا تا آن
19
00:00:44,190 –> 00:00:46,079
عدد منهای 1 تکرار می شود زیرا ما معمولاً
20
00:00:46,079 –> 00:00:49,289
در علوم کامپیوتر از 0 شروع می کنیم، بنابراین
21
00:00:49,289 –> 00:00:51,960
این همان کاری است که اکنون در مورد این
22
00:00:51,960 –> 00:00:55,050
شخص انجام می دهد، بنابراین برای من در محدوده X و شما
23
00:00:55,050 –> 00:00:56,579
ممکن است این تابع محدوده X را دیده باشید یا
24
00:00:56,579 –> 00:00:58,649
قبلاً ادامه میدهم، بگذارید فقط بگویم
25
00:00:58,649 –> 00:01:00,989
که این تفاوت فقط اهمیت دارد
26
00:01:00,989 –> 00:01:04,409
Python 2 که در محدوده Python 3 شروع می
27
00:01:04,409 –> 00:01:07,950
شود، همان رفتار محدوده X است، اما برای
28
00:01:07,950 –> 00:01:10,080
اهداف آموزش این
29
00:01:10,080 –> 00:01:11,729
ویدیو فقط بگوییم که اینها متفاوت هستند،
30
00:01:11,729 –> 00:01:15,630
بنابراین ما در حال حاضر در دنیای Python 2 هستیم،
31
00:01:15,630 –> 00:01:18,780
بنابراین برای I در محدوده X n اگر n باشد. همان
32
00:01:18,780 –> 00:01:20,549
عدد است، فرض کنید 5
33
00:01:20,549 –> 00:01:22,140
دقیقاً به همان روشی عمل می کند که شما
34
00:01:22,140 –> 00:01:23,939
وارد این حلقه می شوید، حلقه
35
00:01:23,939 –> 00:01:27,360
0 1 2 3 و سپس 4 خواهد بود، بنابراین در
36
00:01:27,360 –> 00:01:28,979
ظاهر به نظر می رسد که آنها هیچ تفاوتی با هم ندارند.
37
00:01:28,979 –> 00:01:30,509
آنها همان کار را به
38
00:01:30,509 –> 00:01:32,729
خوبی انجام می دهند، نتیجه یکسانی به شما خواهند داد،
39
00:01:32,729 –> 00:01:34,680
اما آنها این کار را به دو
40
00:01:34,680 –> 00:01:37,110
روش کاملاً متفاوت انجام می دهند و این
41
00:01:37,110 –> 00:01:39,900
دو روش را که می دانید در
42
00:01:39,900 –> 00:01:42,780
سطح بالاتر، تکرار کننده نامیده می شود که
43
00:01:42,780 –> 00:01:45,810
راه برد در مقابل یک است. ژنراتور که
44
00:01:45,810 –> 00:01:49,200
اکنون روشی با محدوده X است که فقط به نوعی
45
00:01:49,200 –> 00:01:50,579
اینها را در سطح بالا توضیح می دهیم زیرا ما
46
00:01:50,579 –> 00:01:52,500
به کد نگاه می کنیم و سرعت
47
00:01:52,500 –> 00:01:53,970
این موارد و مقایسه آنها
48
00:01:53,970 –> 00:01:56,250
با لیست های اندازه های مختلف را بررسی می کنیم، بنابراین
49
00:01:56,250 –> 00:01:58,200
در یک ثانیه به آن خواهیم رسید. اما ابتدا اجازه دهید
50
00:01:58,200 –> 00:01:59,939
مطمئن شویم که مفهوم
51
00:01:59,939 –> 00:02:02,909
بین تکرار کننده را درک کرده ایم و یک ژنراتور در
52
00:02:02,909 –> 00:02:06,180
زبان علوم کامپیوتر، پس این برای من
53
00:02:06,180 –> 00:02:08,940
در محدوده n چه کاری انجام می دهد، فرض کنید n
54
00:02:08,940 –> 00:02:11,550
عدد عظیمی مانند صد میلیون باشد، اولین
55
00:02:11,550 –> 00:02:13,230
کاری که این کار انجام می دهد
56
00:02:13,230 –> 00:02:13,950
این
57
00:02:13,950 –> 00:02:15,629
است که n چیزی که اعداد خواهد بود را در این محدوده بکشد.
58
00:02:15,629 –> 00:02:18,480
بین صفر یک دو
59
00:02:18,480 –> 00:02:20,310
تا این عدد عظیم نه نه نه نه نه،
60
00:02:20,310 –> 00:02:22,620
هر عددی که باشد،
61
00:02:22,620 –> 00:02:25,800
فهرست عظیمی را وارد حافظه کاری ما می کند که مدت
62
00:02:25,800 –> 00:02:27,090
زیادی طول می کشد،
63
00:02:27,090 –> 00:02:28,680
به خصوص اگر لیست واقعاً
64
00:02:28,680 –> 00:02:31,349
واقعاً بزرگ باشد، بنابراین مرحله شماره یک
65
00:02:31,349 –> 00:02:33,060
و سپس مرحله است. شماره دو اکنون که این
66
00:02:33,060 –> 00:02:35,250
لیست بزرگ در حافظه است، می تواند ادامه دهد
67
00:02:35,250 –> 00:02:37,680
و به راحتی کل این لیست را تکرار کند
68
00:02:37,680 –> 00:02:39,870
و هر کاری را که مایلیم
69
00:02:39,870 –> 00:02:42,239
در داخل حلقه for انجام دهیم، انجام دهیم، بنابراین
70
00:02:42,239 –> 00:02:45,750
این کار برای I در محدوده X n بسیار آسان است.
71
00:02:45,750 –> 00:02:48,269
فرض کنید n همان
72
00:02:48,269 –> 00:02:49,739
عدد ده صد میلیون است یا
73
00:02:49,739 –> 00:02:53,160
هر چیزی که قبلاً گفتم وقتی X
74
00:02:53,160 –> 00:02:55,410
محدوده n را صدا می کنیم، این ما
75
00:02:55,410 –> 00:02:57,060
را در این لیست عظیم به حافظه باز نمی گرداند،
76
00:02:57,060 –> 00:02:59,549
بلکه چیزی به نام
77
00:02:59,549 –> 00:03:04,620
ژنراتور و مولد شما ایجاد می کند. می تواند
78
00:03:04,620 –> 00:03:06,870
به عنوان یک کارخانه تصور کند که نام آن به
79
00:03:06,870 –> 00:03:08,579
روشی بسیار زیبا به ما کمک می کند تا آن مفهوم را درک
80
00:03:08,579 –> 00:03:10,380
کنیم، این ژنراتور را به عنوان یک
81
00:03:10,380 –> 00:03:14,160
جعبه کوچک در نظر بگیریم و این جعبه اساساً
82
00:03:14,160 –> 00:03:16,110
شماره بعدی را به ما می دهد که در
83
00:03:16,110 –> 00:03:18,989
صورت نیاز به آن اهمیت می دهیم، بنابراین وقتی می رویم. پیش از این و بگویید
84
00:03:18,989 –> 00:03:21,959
برای I در محدوده X n ما قبل از شروع کار خود
85
00:03:21,959 –> 00:03:23,609
این صد میلیون عدد را به
86
00:03:23,609 –> 00:03:25,319
یکباره به حافظه نمی
87
00:03:25,319 –> 00:03:26,970
کشیم بلکه فقط یک کارخانه کوچک ایجاد
88
00:03:26,970 –> 00:03:29,970
می کنیم و همانطور که از
89
00:03:29,970 –> 00:03:31,530
حلقه for عبور می کنیم و همینطور ادامه می دهیم. اولین تکرار
90
00:03:31,530 –> 00:03:33,329
حلقه for کاری که ما انجام می دهیم این است که از
91
00:03:33,329 –> 00:03:35,310
کارخانه می پرسیم عدد بعدی
92
00:03:35,310 –> 00:03:37,139
93
00:03:37,139 –> 00:03:38,780
94
00:03:38,780 –> 00:03:41,579
چیست.
95
00:03:41,579 –> 00:03:43,019
و بگویید
96
00:03:43,019 –> 00:03:45,030
هی کارخانه شماره بعدی چیست که ما
97
00:03:45,030 –> 00:03:47,459
به آن نیاز داریم، البته عدد بعدی یک است تا
98
00:03:47,459 –> 00:03:49,410
آن عدد را به ما برگرداند و ما این کار
99
00:03:49,410 –> 00:03:51,299
را برای هر تکرار
100
00:03:51,299 –> 00:03:53,280
حلقه for انجام می دهیم، خوب است، بنابراین تا زمانی که به
101
00:03:53,280 –> 00:03:54,829
انتها برسیم به این نه بزرگ نه نه نه
102
00:03:54,829 –> 00:03:57,959
هر عددی که باشد خواهد داد
103
00:03:57,959 –> 00:04:00,359
ما اکنون این عدد را برمی گردانیم شاید متوجه شده باشید
104
00:04:00,359 –> 00:04:01,709
که چرا این موضوع اساساً متفاوت است،
105
00:04:01,709 –> 00:04:03,569
هرگز این
106
00:04:03,569 –> 00:04:05,910
لیست عظیم را به حافظه خود وارد نمی کنیم که
107
00:04:05,910 –> 00:04:08,160
عملیات بسیار کندی است، بلکه ما
108
00:04:08,160 –> 00:04:10,799
یک کارخانه ایجاد می کنیم
109
00:04:10,799 –> 00:04:12,239
و وضعیتی را که در آن به خاطر می آوریم حفظ می کنیم.
110
00:04:12,239 –> 00:04:13,889
آن را کنار بگذاریم تا در تکرار بعدی
111
00:04:13,889 –> 00:04:15,900
حلقه for بتوانیم
112
00:04:15,900 –> 00:04:17,760
بپرسیم عدد بعدی که باید از
113
00:04:17,760 –> 00:04:19,260
آن کارخانه بیاید چیست و سپس می توانیم از آن
114
00:04:19,260 –> 00:04:21,000
عدد در داخل حلقه for خود برای انجام برخی
115
00:04:21,000 –> 00:04:23,270
کارها استفاده کنیم، به همین دلیل است که بسیاری از اوقات
116
00:04:23,270 –> 00:04:26,039
ژنراتورها به عنوان ما در کد خواهیم دید که می
117
00:04:26,039 –> 00:04:27,110
تواند سریعتر باشد
118
00:04:27,110 –> 00:04:28,639
زیرا ما تمام این زمان را از قبل صرف نمی کنیم
119
00:04:28,639 –> 00:04:31,009
تا این حجم عظیم از
120
00:04:31,009 –> 00:04:32,629
داده ها را به حافظه بکشیم و سپس کار خود را شروع کنیم،
121
00:04:32,629 –> 00:04:34,250
بلکه می توانیم بلافاصله کار را شروع
122
00:04:34,250 –> 00:04:36,560
کنیم و سپس این
123
00:04:36,560 –> 00:04:39,379
اعداد را به عنوان اکنون ما به آنها نیاز داریم برخی از شما
124
00:04:39,379 –> 00:04:42,620
که به چیزهای رایگان مشکوک هستید ممکن است به
125
00:04:42,620 –> 00:04:44,419
این فکر کنید که چرا ما
126
00:04:44,419 –> 00:04:46,250
همیشه از ژنراتورها استفاده نمی کنیم، پس
127
00:04:46,250 –> 00:04:48,259
چه فایده ای دارد که مبادله ای که انجام می دهیم چیست
128
00:04:48,259 –> 00:04:50,599
و البته در علوم کامپیوتر همیشه انجام می دهیم.
129
00:04:50,599 –> 00:04:52,430
در یک نوع معاوضه درست
130
00:04:52,430 –> 00:04:55,460
، دو موقعیت وجود دارد، بیایید
131
00:04:55,460 –> 00:04:58,340
بگوییم که در موقعیت یک، ما فقط
132
00:04:58,340 –> 00:04:59,900
این جملات را میگوییم، مثلاً
133
00:04:59,900 –> 00:05:02,629
یک بار در ماه آبی یا
134
00:05:02,629 –> 00:05:04,759
شاید یک بار در روز یا چیزی در آن صورت
135
00:05:04,759 –> 00:05:06,289
ممکن است من را وادار کند. منطقی است که از یک
136
00:05:06,289 –> 00:05:07,969
ژنراتور درست استفاده کنیم، زیرا ما فقط
137
00:05:07,969 –> 00:05:09,440
یک بار آن را فراخوانی میکنیم،
138
00:05:09,440 –> 00:05:11,870
پس چرا همه این چیزها را
139
00:05:11,870 –> 00:05:14,810
بدون دلیل در حافظه بارگذاری میکنیم
140
00:05:14,810 –> 00:05:17,120
که در آن حالت از ژنراتور استفاده میکنیم، حالا فرض کنید
141
00:05:17,120 –> 00:05:19,159
وضعیت شماره دو ما هستیم. با فراخوانی
142
00:05:19,159 –> 00:05:21,379
هر یک از این عبارات بارها و بارها
143
00:05:21,379 –> 00:05:22,909
و بارها در تابع خود،
144
00:05:22,909 –> 00:05:24,710
آنها را شاید یک بار در هر ثانیه یا
145
00:05:24,710 –> 00:05:26,210
هر دقیقه یک بار با فرکانس بسیار بالا فراخوانی می کنیم، در
146
00:05:26,210 –> 00:05:28,340
این صورت ممکن است
147
00:05:28,340 –> 00:05:30,229
استفاده از تکرار کننده منطقی تر باشد و اجازه دهید در مورد
148
00:05:30,229 –> 00:05:32,990
چرایی صحبت کنیم. از یک تکرارکننده استفاده می کنیم، همه
149
00:05:32,990 –> 00:05:34,759
این اعداد را به حافظه می کشیم و
150
00:05:34,759 –> 00:05:36,620
هزینه اولیه زیادی را متحمل می شویم که مدتی طول می کشد،
151
00:05:36,620 –> 00:05:39,770
اما اکنون آنها را در
152
00:05:39,770 –> 00:05:41,240
هر دقیقه یا هر ثانیه
153
00:05:41,240 –> 00:05:42,949
داریم که برای تکرار این
154
00:05:42,949 –> 00:05:44,779
لیست عظیم از n نیاز داریم.
155
00:05:44,779 –> 00:05:47,120
در حافظه منتظر ماست، آنجاست و
156
00:05:47,120 –> 00:05:48,800
تقریباً رایگان است برای ما که فقط
157
00:05:48,800 –> 00:05:51,139
هر چند بار که میخواهیم روی آن تکرار کنیم،
158
00:05:51,139 –> 00:05:54,050
آن را با یک ژنراتور در آن موقعیت مقایسه
159
00:05:54,050 –> 00:05:56,120
کنیم، اگر هر دقیقه این حلقه را صدا میزنیم، اکنون برای یک ژنراتور.
160
00:05:56,120 –> 00:05:58,370
ما
161
00:05:58,370 –> 00:06:00,379
اساساً در هر دقیقه این کارخانه را مجدداً تأسیس می کنیم
162
00:06:00,379 –> 00:06:02,719
و سپس
163
00:06:02,719 –> 00:06:04,430
164
00:06:04,430 –> 00:06:06,949
بارها و بارها و بارها و بارها و بارها و بارها و
165
00:06:06,949 –> 00:06:09,409
بارها از این کارخانه درخواست می کنیم تا این تابع
166
00:06:09,409 –> 00:06:11,150
اساساً بگوید که یک کارخانه شماره بعدی را به من بدهد
167
00:06:11,150 –> 00:06:12,409
هی کارخانه.
168
00:06:12,409 –> 00:06:14,000
عدد بعدی که میتواند
169
00:06:14,000 –> 00:06:16,219
گرانتر شود، اگر
170
00:06:16,219 –> 00:06:18,699
همه این اعداد را از قبل بارگیری کرده بودیم و آن ضربه را از
171
00:06:18,699 –> 00:06:21,650
قبل بارگذاری میکردیم و سپس فقط روی آنها تکرار میکردیم،
172
00:0