در این مطلب، ویدئو اجتناب از حلقه های واردات در پایتون با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:10:21
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,320 –> 00:00:02,240
سلام.
2
00:00:02,240 –> 00:00:04,240
3
00:00:04,240 –> 00:00:05,759
4
00:00:05,759 –> 00:00:07,200
5
00:00:07,200 –> 00:00:09,519
6
00:00:09,519 –> 00:00:13,440
7
00:00:13,440 –> 00:00:15,120
8
00:00:15,120 –> 00:00:18,400
یک واردات دایره ای است
9
00:00:18,400 –> 00:00:20,160
در این ویدیو ما به این خواهیم پرداخت که این
10
00:00:20,160 –> 00:00:22,720
واردات دایره ای معمولاً چگونه ایجاد می شود و
11
00:00:22,720 –> 00:00:25,519
راه های اصلی برای رفع آنها
12
00:00:25,519 –> 00:00:27,359
چیست در اینجا ساده ترین و رایج ترین روشی است
13
00:00:27,359 –> 00:00:28,960
که این نوع چرخه واردات می
14
00:00:28,960 –> 00:00:30,720
تواند در زمان اجرا اتفاق بیفتد.
15
00:00:30,720 –> 00:00:32,558
16
00:00:32,558 –> 00:00:34,399
a شروع به
17
00:00:34,399 –> 00:00:35,920
مقداردهی اولیه a می کند، شروع به اجرای
18
00:00:35,920 –> 00:00:37,040
کد از a می کند،
19
00:00:37,040 –> 00:00:39,600
اما اولین خط در a این است که
20
00:00:39,600 –> 00:00:41,520
چیزی را از ماژول b وارد می کند،
21
00:00:41,520 –> 00:00:44,719
بنابراین مقداردهی اولیه a را متوقف می کند زیرا
22
00:00:44,719 –> 00:00:46,960
b باید ابتدا مقداردهی شود و سپس
23
00:00:46,960 –> 00:00:48,719
به b می رود و شروع به اجرای آن کد می کند.
24
00:00:48,719 –> 00:00:49,920
در
25
00:00:49,920 –> 00:00:52,000
عوض، اولین خط در b این است که
26
00:00:52,000 –> 00:00:54,399
به چیزی از a نیاز دارد، بنابراین اجرای b را متوقف میکند
27
00:00:54,399 –> 00:00:56,320
و به a میرود
28
00:00:56,320 –> 00:00:57,840
و میخواهد تازه
29
00:00:57,840 –> 00:01:00,719
a را شروع کند، اما متوجه میشود که a در
30
00:01:00,719 –> 00:01:03,039
حال حاضر در مراحل اولیه است.
31
00:01:03,039 –> 00:01:06,240
بنابراین در اینجاست که خطا رخ میدهد،
32
00:01:06,240 –> 00:01:08,080
ما در واقع میتوانیم این زنجیره از رویدادها
33
00:01:08,080 –> 00:01:10,640
را در ردیابی مشاهده کنیم که در اینجا میبینیم که در
34
00:01:10,640 –> 00:01:12,880
اصل سعی میکند تابع a را برای
35
00:01:12,880 –> 00:01:15,360
ماژول a وارد کند که وارد کردن
36
00:01:15,360 –> 00:01:17,520
تابع b را برای ماژول b آغاز کرد و سپس
37
00:01:17,520 –> 00:01:19,360
وارد کردن تابع a را آغاز کرد. دوباره
38
00:01:19,360 –> 00:01:21,119
از ماژول a که همان جایی است که
39
00:01:21,119 –> 00:01:23,520
خطای نهایی
40
00:01:23,520 –> 00:01:24,880
به روشی که در حال حاضر چیزها نوشته میشوند رخ داده است،
41
00:01:24,880 –> 00:01:27,600
ما یک چرخه زمانی واردات
42
00:01:27,600 –> 00:01:30,159
بین ماژولهای a و b داریم،
43
00:01:30,159 –> 00:01:31,759
اما اگر واقعاً به نامهایی
44
00:01:31,759 –> 00:01:33,920
که وارد کردهایم نگاه کنید، در واقع از آنها استفاده نمیکنیم.
45
00:01:33,920 –> 00:01:36,000
در زمان وارد کردن، زمانی که
46
00:01:36,000 –> 00:01:38,479
این تابع a یا این تابع
47
00:01:38,479 –> 00:01:41,040
b2 فراخوانی میشود، از آنها استفاده میکنیم، زیرا در واقع
48
00:01:41,040 –> 00:01:43,119
این توابع را در زمان واردات فراخوانی نمیکنیم
49
00:01:43,119 –> 00:01:45,520
، هیچ وابستگی چرخهای واقعی وجود ندارد، به این
50
00:01:45,520 –> 00:01:47,119
معنی که میتوانیم از این چرخه واردات خلاص
51
00:01:47,119 –> 00:01:48,320
52
00:01:48,320 –> 00:01:50,000
شویم، سه روش رایج برای این مشکل را حل
53
00:01:50,000 –> 00:01:52,479
کنید، اولین مورد این است که ایمپورت خود را بردارید
54
00:01:52,479 –> 00:01:55,600
و آن را در داخل تابع
55
00:01:55,600 –> 00:01:57,600
در پایتون
56
00:01:57,600 –> 00:01:59,520
57
00:01:59,520 –> 00:02:00,960
قرار دهید. به
58
00:02:00,960 –> 00:02:03,680
این تابع b1 نیاز دارید، آنگاه ممکن است مشکلی نباشد
59
00:02:03,680 –> 00:02:06,320
که فقط وارد کردن را در اینجا انجام دهید،
60
00:02:06,320 –> 00:02:07,840
این کار می تواند حتی
61
00:02:07,840 –> 00:02:09,280
کارآمدتر باشد، زیرا
62
00:02:09,280 –> 00:02:11,280
اگر هرگز تابع a را صدا نکنید، ممکن است اصلاً
63
00:02:11,280 –> 00:02:13,680
مجبور نباشید b را وارد کنید،
64
00:02:13,680 –> 00:02:14,959
اما فرض کنید که شما تعداد زیادی
65
00:02:14,959 –> 00:02:16,720
توابع مختلف در a داشته باشید و تعداد زیادی
66
00:02:16,720 –> 00:02:19,440
توابع مختلف از این تابع b1 استفاده می کنند،
67
00:02:19,440 –> 00:02:20,959
در این صورت راه حل بهتر این
68
00:02:20,959 –> 00:02:24,800
است که فقط ماژول b را مستقیما وارد کنید
69
00:02:24,800 –> 00:02:26,400
و سپس در توابعی که از
70
00:02:26,400 –> 00:02:29,360
آن استفاده می کنید از ماژول b با نام طولانی تر استفاده کنید.
71
00:02:29,360 –> 00:02:32,080
b1
72
00:02:32,080 –> 00:02:34,160
ادامه دهید و این تبدیل را برای همه
73
00:02:34,160 –> 00:02:36,400
ماژولهای درگیر در چرخه انجام
74
00:02:36,400 –> 00:02:38,160
دهید، بیایید ببینیم چگونه چرخه واردات
75
00:02:38,160 –> 00:02:39,920
را در زمان اجرا حل میکند
76
00:02:39,920 –> 00:02:41,840
ابتدا تابع اصلی ما سعی میکند
77
00:02:41,840 –> 00:02:43,599
چیزی را وارد کند که باعث میشود a شروع به
78
00:02:43,599 –> 00:02:44,959
79
00:02:44,959 –> 00:02:47,360
اجرا کند و به ماژول import b
80
00:02:47,360 –> 00:02:49,360
میرسیم که باعث میشود b برای شروع اجرا
81
00:02:49,360 –> 00:02:52,000
در b زمانی که به ماژول import a می رسیم،
82
00:02:52,000 –> 00:02:54,560
زیرا ماژول a قبلاً شروع به
83
00:02:54,560 –> 00:02:56,800
مقداردهی اولیه کرده است، شیء ماژول از نظر
84
00:02:56,800 –> 00:02:58,480
فنی وجود دارد
85
00:02:58,480 –> 00:03:00,560
از آنجایی که وجود دارد، اجرا مجدد این ماژول را شروع نمی کند.
86
00:03:00,560 –> 00:03:02,879
میگوید خوب است که وجود دارد،
87
00:03:02,879 –> 00:03:04,720
بنابراین ماژول b فقط
88
00:03:04,720 –> 00:03:06,800
وارد کردن خود را به پایان میرساند و بعد از اینکه
89
00:03:06,800 –> 00:03:08,800
وارد کردن انجام شد، ماژول a
90
00:03:08,800 –> 00:03:10,640
وارد کردن را به پایان میرساند
91
00:03:10,640 –> 00:03:12,239
. سومین و آخرین راه رایج برای
92
00:03:12,239 –> 00:03:13,840
خلاص شدن از این چرخه واردات این است که فقط
93
00:03:13,840 –> 00:03:15,760
دو ماژول را با هم ادغام کنید.
94
00:03:15,760 –> 00:03:18,800
چرخههای وارداتی را وارد نمیکند، اما اگر
95
00:03:18,800 –> 00:03:20,720
در وهله اول دو یا شاید حتی بیشتر ماژول
96
00:03:20,720 –> 00:03:22,800
داشتید، احتمالاً به دلایلی آنها را داشتید،
97
00:03:22,800 –> 00:03:24,799
بنابراین من
98
00:03:24,799 –> 00:03:26,000
فقط توصیه نمیکنم همه ماژولهای خود را بردارید
99
00:03:26,000 –> 00:03:27,680
و آنها را در یک ماژول ادغام کنید.
100
00:03:27,680 –> 00:03:29,200
احمقانه است، بنابراین به
101
00:03:29,200 –> 00:03:30,640
همین دلیل احتمالاً باید استفاده از
102
00:03:30,640 –> 00:03:32,879
یکی از دو روش اول را ترجیح
103
00:03:32,879 –> 00:03:34,879
دهید، بیایید به مثال دیگری نگاهی بیندازیم.
104
00:03:34,879 –> 00:03:36,640
متداول ترین نوع چرخه واردات بعدی
105
00:03:36,640 –> 00:03:38,480
که با آن مواجه خواهید شد به دلیل استفاده از
106
00:03:38,480 –> 00:03:40,319
نکات نوع است که
107
00:03:40,319 –> 00:03:42,159
این مثال شبیه به آن نیست. مورد
108
00:03:42,159 –> 00:03:44,799
قبلی زیرا حاشیهنویسیهای نوع
109
00:03:44,799 –> 00:03:46,400
بر روی تعریف تابع یا تعریف کلاس
110
00:03:46,400 –> 00:03:48,799
تعریف میشوند، زمانی که تابع تعریف میشود
111
00:03:48,799 –> 00:03:50,959
یا زمانی که کلاس تعریف میشود نه زمانی
112
00:03:50,959 –> 00:03:52,400
که اجرا میشود،
113
00:03:52,400 –> 00:03:53,680
بلکه اگر به آن فکر میکنید،
114
00:03:53,680 –> 00:03:55,840
رایجترین مورد استفاده از تایپ است. e hinting
115
00:03:55,840 –> 00:03:58,159
حتی در زمان اجرا نیست، بلکه برای آنالایزرهای نوع ایستا
116
00:03:58,159 –> 00:04:00,560
مانند Pie من است،
117
00:04:00,560 –> 00:04:02,560
اگر تنها چیزی که ما به آن اهمیت می دهیم تجزیه و تحلیل استاتیک است،
118
00:04:02,560 –> 00:04:04,400
پس حتی نیازی به وارد کردن
119
00:04:04,400 –> 00:04:05,840
در زمان
120
00:04:05,840 –> 00:04:07,680
اجرا نداریم، ماژول تایپ این بررسی نوع متغیر را ارائه می دهد
121
00:04:07,680 –> 00:04:09,680
که در زمان اجرا فقط نادرست است.
122
00:04:09,680 –> 00:04:12,080
بنابراین اگر تمام وارداتی را
123
00:04:12,080 –> 00:04:13,760
که فقط به منظور
124
00:04:13,760 –> 00:04:15,920
بررسی نوع نیاز دارید در یکی از اینها قرار دهید، اگر
125
00:04:15,920 –> 00:04:18,238
بررسی تایپ بررسی شود، هیچ یک از آنها
126
00:04:18,238 –> 00:04:20,079
در زمان اجرا اتفاق نمیافتد و به طور کامل
127
00:04:20,079 –> 00:04:21,918
از حلقه import اجتناب میکنید،
128
00:04:21,918 –> 00:04:23,600
اما اکنون اگر این تابع را وارد
129
00:04:23,600 –> 00:04:25,120
کنید، میروید برای دریافت خطای نام، زیرا
130
00:04:25,120 –> 00:04:27,600
این نام b وارد نشده است
131
00:04:27,600 –> 00:04:29,600
تا این مشکل برطرف شود، ادامه دهید و این را از
132
00:04:29,600 –> 00:04:31,840
حاشیهنویسیهای وارداتی آینده اضافه کنید، کاری که
133
00:04:31,840 –> 00:04:33,680
در واقع انجام میدهد این است که نحوه
134
00:04:33,680 –> 00:04:36,400
کار حاشیهنویسیها را به جای ارزیابی b
135
00:04:36,400 –> 00:04:39,040
به عنوان یک نام، تغییر
136
00:04:39,040 –> 00:04:40,639
میدهد. رشتهها،
137
00:04:40,639 –> 00:04:42,320
بنابراین اکنون در زمان اجرا در اینجا با خطا مواجه نمیشوید،
138
00:04:42,320 –> 00:04:44,000
زیرا حتی اگر نام
139
00:04:44,000 –> 00:04:46,320
b وارد نشده باشد، رشته b قطعا
140
00:04:46,320 –> 00:04:47,520
وجود دارد،
141
00:04:47,520 –> 00:04:48,960
باید توجه داشته باشید که هر زمان
142
00:04:48,960 –> 00:04:51,199
یکی از این موارد را از fut انجام دهید. در حال حاضر
143
00:04:51,199 –> 00:04:53,360
لزوماً رفتار تضمین شده ای
144
00:04:53,360 –> 00:04:54,960
برای
145
00:04:54,960 –> 00:04:56,800
همیشه نیست، این باعث می شود که حاشیه نویسی های شما
146
00:04:56,800 –> 00:04:58,880
به صورت رشته ای در نظر گرفته شوند، اما در
147
00:04:58,880 –> 00:05:01,280
واقع یک پیشنهاد رقابتی وجود دارد که باعث
148
00:05:01,280 –> 00:05:03,440
می شود آنها را با تنبلی ارزیابی کنید، بنابراین به
149
00:05:03,440 –> 00:05:05,440
هیچ وجه ارزیابی نمی شوند، مگر اینکه سعی کنید
150
00:05:05,440 –> 00:05:07,199
به آنها نگاه کنید،
151
00:05:07,199 –> 00:05:08,639
مگر اینکه شما در واقع در حال بررسی