در این مطلب، ویدئو سیستم واردات پایتون – شی ماژول| بستههای منظم/نام فضایی|یابنده و بارگذار|واردات نسبی با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:29:20
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:02,000 –> 00:00:03,520
انتقال یک ماژول راهی برای
2
00:00:03,520 –> 00:00:06,399
دسترسی به کد داخل
3
00:00:06,399 –> 00:00:08,080
ماژول است که فقط مقداری کد در یک
4
00:00:08,080 –> 00:00:09,679
فایل واحد است
5
00:00:09,679 –> 00:00:11,120
در این مثال ما یک عبارت چاپی داریم
6
00:00:11,120 –> 00:00:13,200
یک متغیر x و یک تابع
7
00:00:13,200 –> 00:00:15,759
به نام say hi as code
8
00:00:15,759 –> 00:00:19,680
code در فایلی به نام module1 است. py
9
00:00:19,680 –> 00:00:22,560
در همان دایرکتوری module1.py
10
00:00:22,560 –> 00:00:25,920
ما یک فایل main.py دیگر
11
00:00:25,920 –> 00:00:28,480
در main.py داریم ما یک خط کد برای
12
00:00:28,480 –> 00:00:29,199
وارد کردن داریم
13
00:00:29,199 –> 00:00:31,920
1. توجه داشته باشید که نام فایل بدون
14
00:00:31,920 –> 00:00:35,280
پسوند dot py نام ماژول است
15
00:00:35,280 –> 00:00:38,000
حالا اجازه دهید main را اجرا کنیم. فایل py با استفاده
16
00:00:38,000 –> 00:00:40,640
از مفسر پایتون
17
00:00:40,640 –> 00:00:42,680
، خروجی دستور چاپ
18
00:00:42,680 –> 00:00:44,160
را مشاهده میکنید، بنابراین
19
00:00:44,160 –> 00:00:46,079
به سادگی وارد کردن ماژول
20
00:00:46,079 –> 00:00:49,760
کد را در ماژول خط به خط اجرا میکند،
21
00:00:51,520 –> 00:00:53,520
نکته دیگری که باید درک کنید این است که درست
22
00:00:53,520 –> 00:00:54,640
مانند هر چیز دیگری،
23
00:00:54,640 –> 00:00:58,079
یک ماژول در پایتون نیز یک شی است که در پایتون
24
00:00:58,079 –> 00:00:59,760
انتقال میدهد. module creates دو کار را انجام می دهد
25
00:00:59,760 –> 00:01:01,680
که عمدتاً
26
00:01:01,680 –> 00:01:03,600
ابتدا یک شی ماژول
27
00:01:03,600 –> 00:01:05,760
در جایی در حافظه ایجاد می کند
28
00:01:05,760 –> 00:01:07,600
و نام ماژول به عنوان یک کلید در
29
00:01:07,600 –> 00:01:09,360
فرهنگ لغت فضای نام جهانی ماژول های فعلی ذخیره می شود که
30
00:01:09,360 –> 00:01:11,840
31
00:01:11,840 –> 00:01:13,520
مربوط به این نام ماژول
32
00:01:13,520 –> 00:01:17,040
آدرس ne خواهد بود. شی ماژول w
33
00:01:17,040 –> 00:01:18,880
این همان چیزی است که اگر نوع ماژول را بررسی کنید،
34
00:01:18,880 –> 00:01:20,720
متغیر دیگری را در فایل با استفاده از
35
00:01:20,720 –> 00:01:23,680
عملگر انتساب اعلام می
36
00:01:24,960 –> 00:01:26,640
37
00:01:26,640 –> 00:01:29,920
38
00:01:29,920 –> 00:01:31,600
39
00:01:31,600 –> 00:01:33,520
40
00:01:33,520 –> 00:01:35,439
41
00:01:35,439 –> 00:01:37,520
کنیم. با هر متغیر دیگری در پایتون
42
00:01:37,520 –> 00:01:39,040
میتوانیم آدرس حافظه
43
00:01:39,040 –> 00:01:42,720
شی ماژول را با استفاده از تابع id دریافت کنیم،
44
00:01:42,720 –> 00:01:44,720
حتی میتوانیم یک شی ماژول جدید
45
00:01:44,720 –> 00:01:46,560
را خودمان با ارسال نام ماژول
46
00:01:46,560 –> 00:01:50,079
و یک رشته doc به نوع ماژول
47
00:01:52,240 –> 00:01:54,240
مانند سایر متغیرها ایجاد کنیم، همچنین میتوانید
48
00:01:54,240 –> 00:01:57,600
یک نام مستعار ایجاد کنید. برای شی ماژول،
49
00:01:57,600 –> 00:01:59,759
هم مد زیر خط من و هم ماژول
50
00:01:59,759 –> 00:02:01,439
1 ارجاعاتی به همان شی در
51
00:02:01,439 –> 00:02:03,840
حافظه خواهند بود
52
00:02:04,719 –> 00:02:06,399
، دستور import خود از
53
00:02:06,399 –> 00:02:09,840
ایجاد نام های سفارشی برای ماژول پشتیبانی می کند
54
00:02:11,038 –> 00:02:12,720
، مثال بعدی ما یک
55
00:02:12,720 –> 00:02:14,879
متغیر سراسری x و یک تابع
56
00:02:14,879 –> 00:02:17,040
تابع زیرخط من
57
00:02:17,040 –> 00:02:18,640
در تابع اعلام می کنیم. ما در حال چاپ
58
00:02:18,640 –> 00:02:20,840
فایل dunder متغیری هستیم که
59
00:02:20,840 –> 00:02:23,840
60
00:02:24,959 –> 00:02:26,720
پس از وارد کردن این ماژول در یک فایل دیگر آن
61
00:02:26,720 –> 00:02:29,040
را اعلام نکردیم و می توانیم متغیر سراسری x خود را ببینیم
62
00:02:29,040 –> 00:02:30,560
و function my underscore func در
63
00:02:30,560 –> 00:02:33,920
میان ویژگیهای این شی ماژول،
64
00:02:33,920 –> 00:02:35,519
همه متغیرها و توابعی که
65
00:02:35,519 –> 00:02:37,040
در دامنه جهانی در
66
00:02:37,040 –> 00:02:38,879
ماژول یک اعلام میکنیم، به عنوان
67
00:02:38,879 –> 00:02:41,840
ویژگیهای شی ماژول پس از import
68
00:02:41,840 –> 00:02:43,440
python همچنین چند
69
00:02:43,440 –> 00:02:45,040
متغیر دیگر مانند فایل
70
00:02:45,040 –> 00:02:48,800
dunder dunder name و غیره را در ماژول ایجاد میکنند، در دسترس هستند. یکی ما میتوانیم
71
00:02:48,800 –> 00:02:50,080
مستقیماً از آنها استفاده کنیم زیرا به
72
00:02:50,080 –> 00:02:53,040
عنوان متغیرهای سراسری در دسترس هستند،
73
00:02:53,040 –> 00:02:54,400
همه این نمادها در فرهنگ لغت ماژول ذخیره میشوند.
74
00:02:54,400 –> 00:02:58,160
75
00:03:00,480 –> 00:03:02,400
76
00:03:02,400 –> 00:03:05,840
77
00:03:05,920 –> 00:03:08,000
78
00:03:08,000 –> 00:03:10,000
79
00:03:10,000 –> 00:03:13,360
نام ماژول dot خصیصه نام نحو دستور
80
00:03:13,360 –> 00:03:14,800
dunder name ویژگی نام
81
00:03:14,800 –> 00:03:19,840
ماژول را به عنوان مقدار آن خواهد داشت
82
00:03:20,480 –> 00:03:22,239
نام ماژول همان نام فایل
83
00:03:22,239 –> 00:03:25,200
بدون پسوند dot py
84
00:03:25,200 –> 00:03:26,879
ویژگی فایل dunder
85
00:03:26,879 –> 00:03:30,000
مسیر مطلق فایل ماژول را خواهد داشت
86
00:03:30,000 –> 00:03:31,440
که می توانید تابع اعلام شده در آن را فراخوانی کنید.
87
00:03:31,440 –> 00:03:34,560
ماژول 1 با استفاده از نحو نقطه
88
00:03:34,560 –> 00:03:35,920
اگر به نام ماژول در
89
00:03:35,920 –> 00:03:37,680
فرهنگ لغت ویژگی ها نگاه کنید، دریافت خواهید کرد
90
00:03:37,680 –> 00:03:39,840
شی تابع
91
00:03:39,840 –> 00:03:41,760
با استفاده از پرانتز میتوانید شی تابع را اجرا کنید
92
00:03:41,760 –> 00:03:44,560
93
00:03:44,640 –> 00:03:46,640
توجه داشته باشید که همه ماژولهای پایتون
94
00:03:46,640 –> 00:03:49,519
لزوماً در پایتون
95
00:03:49,519 –> 00:03:51,200
نوشته نمیشوند، برخی به زبانهای کامپایلشده
96
00:03:51,200 –> 00:03:54,799
مانند c یا c plus برای عملکرد بهتر
97
00:03:54,799 –> 00:03:56,720
در اینجا نوشته شدهاند.
98
00:03:56,720 –> 00:04:00,959
99
00:04:00,959 –> 00:04:03,040
پایتون سیستم واردات خود را از
100
00:04:03,040 –> 00:04:06,720
طریق ویژگی metapath ماژول sys نشان می دهد
101
00:04:06,720 –> 00:04:09,840
metapath لیستی از اشیاء است
102
00:04:09,840 –> 00:04:11,680
تا بفهمیم این اشیاء چیست که
103
00:04:11,680 –> 00:04:14,799
باید درباره یاب ها و لودرها بدانیم.
104
00:04:14,799 –> 00:04:16,478
105
00:04:16,478 –> 00:04:18,399
106
00:04:18,399 –> 00:04:20,238
107
00:04:20,238 –> 00:04:22,400
108
00:04:22,400 –> 00:04:26,240
وظیفه ماژول و لودر بارگذاری آن
109
00:04:26,479 –> 00:04:28,479
تمرین ماژول است، یک یاب کلاسی است که دارای یک
110
00:04:28,479 –> 00:04:30,000
متد نمونه پیدا کردن مشخصات است
111
00:04:30,000 –> 00:04:31,759
و یک لودر کلاسی است که یک
112
00:04:31,759 –> 00:04:34,240
روش نمونه بارگذاری مدول دارد،
113
00:04:34,240 –> 00:04:37,680
چیزی که metapath نشان می دهد لیستی از یاب ها است،
114
00:04:37,680 –> 00:04:39,600
بنابراین همه آن اشیا پیاده سازی می کنند.
115
00:04:39,600 –> 00:04:42,000
روش find spec
116
00:04:42,000 –> 00:04:44,000
برخی از آبجکت ها هم Finder و هم Loder را پیاده سازی می کنند،
117
00:04:44,000 –> 00:04:45,680
118
00:04:45,680 –> 00:04:49,120
چنین شی ای بر اساس نام شی وارد کننده نامیده می شود.
119
00:04:49,120 –> 00:04:50,560
120
00:04:50,560 –> 00:04:52,240
شما می توانید بگویید که
121
00:04:52,240 –> 00:04:53,680
دو مورد اول وارد کننده هستند و
122
00:04:53,680 –> 00:04:56,639
سومی فقط یابنده است.
123
00:04:56,639 –> 00:04:58,479
بعد بیایید خودمان از این روش ها استفاده
124
00:04:58,479 –> 00:05:01,040
کنیم
125
00:05:01,120 –> 00:05:02,960
در اینجا من شی داخلی وارد کننده را در متغیر importer ذخیره می کنم.
126
00:05:02,960 –> 00:05:06,240
127
00:05:06,240 –> 00:05:07,840
برای
128
00:05:07,840 –> 00:05:10,000
129
00:05:10,000 –> 00:05:11,520
ماژولهای داخلی، ماژولهای داخلی با ماژولهای
130
00:05:11,520 –> 00:05:14,240
موجود در کتابخانه استاندارد متفاوت هستند،
131
00:05:14,240 –> 00:05:15,840
ماژولهای داخلی، ماژولهایی هستند
132
00:05:15,840 –> 00:05:19,039
که در مفسر پایتون کامپایل میشوند،
133
00:05:19,039 –> 00:05:20,720
ویژگی نامهای ماژول داخلی ماژول sys، چندین مورد از این موارد داخلی
134
00:05:20,720 –> 00:05:22,800
را برمیگرداند.
135
00:05:22,800 –> 00:05:25,840
نام ماژول
136
00:05:28,479 –> 00:05:30,240
از آنجایی که واردکننده یک یاب است،
137
00:05:30,240 –> 00:05:32,160
میتوانیم متد find spec را روی آن فراخوانی کنیم و
138
00:05:32,160 –> 00:05:35,440
ابزارهای ویرایشگر رشته را به آن منتقل کنیم.
139
00:05:35,440 –> 00:05:37,520
140
00:05:37,520 –> 00:05:39,199
141
00:05:39,199 –> 00:05:40,880
142
00:05:40,880 –> 00:05:42,880
143
00:05:42,880 –> 00:05:44,800
144
00:05:44,800 –> 00:05:47,919
ما خود همان شی را دریافت می کنیم،
145
00:05:47,919 –> 00:05:49,840
سپس می توانید متد ماژول بارگذاری
146
00:05:49,840 –> 00:05:51,680
را در
147
00:05:51,680 –> 00:05:55,280
لودر فراخوانی
148
00:05:55,280 –> 00:05:57,280
149
00:05:57,280 –> 00:06:00,080
150
00:06:00,080 –> 00:06:01,840
کنید. اگر
151
00:06:01,840 –> 00:06:03,600
از واردکننده داخلی برای بارگذاری یک ماژول غیر داخلی
152
00:06:03,600 –> 00:06:05,840
153
00:06:05,840 –> 00:06:08,560
154
00:06:10,240 –> 00:06:13,759
استفاده کنیم، چه
155
00:06:13,759 –> 00:06:15,280
اتفاقی میافتد
156
00:06:15,280 –> 00:06:17,039
157
00:06:17,039 –> 00:06:20,080
158
00:06:20,080 –> 00:06:22,160
159
00:06:22,160 –> 00:06:24,960
. sys.path
160
00:06:24,960 –> 00:06:26,800
این لیست در هنگام راه اندازی برنامه مقدار دهی اولیه می شود
161
00:06:26,800 –> 00:06:28,720
و اولین مورد در این لیست
162
00:06:28,720 –> 00:06:30,000
دایرکتوری فعلی شما خواهد بود
163
00:06:30,000 –> 00:06:32,840
که از آن فایل را با استفاده از مفسر پایتون اجرا می کنید.
164
00:06:32,840 –> 00:06:35,840
165
00:06:36,560 –> 00:06:38,400
166
00:06:38,400 –> 00:06:41,440
167
00:06:42,800 –> 00:06:44,639
168
00:06:44,639 –> 00:06:46,080
برای استفاده برای بارگذاری
169
00:06:46,080 –> 00:06:48,319
ماژول سوکت
170
00:06:48,319 –> 00:06:49,759
در اینجا نام لودری که
171
00:06:49,759 –> 00:06:52,319
باید از آن استفاده
172
00:06:52,319 –> 00:06:53,919
کنیم sourcefileloader است، همچنین مسیر
173
00:06:53,919 –> 00:06:56,000
فایل ماژول سوکت را دارد
174
00:06:56,000 –> 00:06:57,440
توجه داشته باشید که در اینجا لودر
175
00:06:57,440 –> 00:07:00,240
همان شی pathfinder نیست،
176
00:07:00,240 –> 00:07:02,160
می توانیم با فراخوانی
177
00:07:02,160 –> 00:07:06,080
load module شی ماژول را دریافت کنیم. در این فایل منبع،
178
00:07:09,120 –> 00:07:11,520
python همچنین این شی spec ماژول را
179
00:07:11,520 –> 00:07:12,960
به عنوان مقدار ویژگی dunder spec
180
00:07:12,960 –> 00:07:16,000
ماژول تنظیم می کند.
181
00:07:16,000 –> 00:07:17,680
182
00:07:17,680 –> 00:07:20,960
dule in action
183
00:07:20,960 –> 00:07:23,039
python دستور import را اجرا می کند که
184
00:07:23,039 –> 00:07:24,560
ابتدا آن را در یک کش جهانی از
185
00:07:24,560 –> 00:07:26,960
ماژول های بارگذاری شده بررسی می کند،
186
00:07:26,960 –> 00:07:28,720
این کش فقط یک فرهنگ لغت با
187
00:07:28,720 –> 00:07:30,960
نام ماژول به عنوان کلید و شی ماژول به عنوان
188
00:07:30,960 –> 00:07:32,560
مقادیری است
189
00:07:32,560 –> 00:07:34,560
که ماژول در این کش وجود دارد،
190
00:07:34,560 –> 00:07:37,039
191
00:07:37,039 –> 00:07:39,360
اگر وارد کردن پایتون نباشد، بلافاصله برگردانده می شود. پروتکلی
192
00:07:39,360 –> 00:07:40,880
فراخوانی می شود که یاب های قبلی را شامل می شود
193
00:07:40,880 –> 00:07:44,240
و لودر بارگذار
194
00:07:44,240 –> 00:07:47,360
شی ماژول را در حافظه ایجاد می کند
195
00:07:47,360 –> 00:07:49,120
و یک ورودی به کش جهانی اضافه می شود
196
00:07:49,120 –> 00:07:51,280
197
00:07:51,280 –> 00:07:53,520
sys.modules فرهنگ لغتی است که
198
00:07:53,520 –> 00:07:55,039
نام ماژول ها را به ماژول هایی که
199
00:07:55,039 –> 00:07:58,879
قبلاً بارگذاری شده اند و در
200
00:07:58,879 –> 00:08:01,039
فضای نام ماژول های فعلی ما نگاشت می کند. ما نام ماژول
201
00:08:01,039 –> 00:08:04,879
1 را به عنوان ارجاع به شی ماژول دریافت می کنیم
202
00:08:08,240 –> 00:08:12,160
چه اتفاقی می افتد وقتی ماژول 1 را حذف می کنید.
203
00:08:12,160 –> 00:08:13,680
204
00:08:13,680 –> 00:08:16,400
205
00:08:16,400 –> 00:08:19,520
206
00:08:19,520 –> 00:08:21,520
207
00:08:21,520 –> 00:08:23,360
208
00:08:23,360 –> 00:08:25,360
ماژول دوباره
209
00:08:25,360 –> 00:08:27,759
کد ماژول کامپایل نمی شود و
210
00:08:27,759 –> 00:08:29,440
دوباره اجرا نمی
211
00:08:29,440 –> 00:08:31,280
شود یک مرجع به شی ماژول موجود
212
00:08:31,280 –> 00:08:33,680
213
00:08:34,719 –> 00:08:36,240
دیگر علاقه مند شود. نکته این است که
214
00:08:36,240 –> 00:08:38,240
اگر ورودی در sys.modules
215
00:08:38,240 –> 00:08:41,519
وجود داشته باشد، هیچ بررسی دیگری در اینجا انجام نمی شود، من
216
00:08:41,519 –> 00:08:44,880
یک ورودی برای تست زیر خط خود اضافه می کنم
217
00:08:44,880 –> 00:08:47,200
، مقدار آن یک شی ماژول نیست، یک
218
00:08:47,200 –> 00:08:48,720
تابع است
219
00:08:48,720 –> 00:08:50,560
و اگر سعی کنم آن را وارد کنم،
220
00:08:50,560 –> 00:08:52,560
با موفقیت کامل می شود.
221
00:08:52,560 –> 00:08:54,080
بررسی با تابع type نیز
222
00:08:54,080 –> 00:08:57,120
نشان میدهد که این تابعی است که
223
00:08:58,080 –> 00:09:01,680
فرض کنید میخواهیم ماژولی را بارگیری مجدد
224
00:09:01,680 –> 00:09:03,600
کنیم که ماژول را
225
00:09:03,600 –> 00:09:05,519
برای اولین بار وارد کردیم.
226
00:09:05,519 –> 00:09:07,519
227
00:09:07,519 –> 00:09:08,000
228
00:09:08,000 –> 00:09:11,600
229
00:09:11,600 –> 00:09:14,640
230
00:09:14,640 –> 00:09:16,320
ماژولها نام ماژول را
231
00:09:16,320 –> 00:09:17,839
حذف میکنیم. فقط مرجع را در فضای نام سراسری ماژول فعلی ما حذف میکند،
232
00:09:17,839 –> 00:09:22,080
233
00:09:22,080 –> 00:09:23,920
شی ماژول و ورود آن در
234
00:09:23,920 –> 00:09:26,880
sys.modules باقی میماند
235
00:09:26,880 –> 00:09:30,160
این چیزی نیست که ما میخواستیم
236
00:09:33,279 –> 00:09:34,880
گزینه دیگری حذف نگاشت
237
00:09:34,880 –> 00:09:37,920
ذخیره شده در ماژولهای sys dot است.
238
00:09:37,920 –> 00:09:39,680
فقط
239
00:09:39,680 –> 00:09:41,440
ارجاع به اشیاء ماژول ذخیره شده در
240
00:09:41,440 –> 00:09:43,279
فرهنگ لغت sys.modules را حذف می کند و
241
00:09:43,279 –> 00:09:46,800
نه شی واقعی را اکنون اگر
242
00:09:46,800 –> 00:09:48,720
ماژول را دوباره وارد کنید، پایتون ابتدا
243
00:09:48,720 –> 00:09:49,360
در
244
00:09:49,360 –> 00:09:51,279
ماژول ها نگاه می کند. آنجا نیست،
245
00:09:51,279 –> 00:09:53,279
کد ماژول را کامپایل و اجرا می کند تا
246
00:09:53,279 –> 00:09:56,080
یک شی ماژول جدید ایجاد کند،
247
00:09:56,080 –> 00:09:57,600
بنابراین ما توانستیم به آنچه می خواستیم برسیم،
248
00:09:57,600 –> 00:09:59,120
249
00:09:59,120 –> 00:10:00,560
اما یک مشکل با این رویکرد وجود دارد که
250
00:10:00,560 –> 00:10:02,480
251
00:10:02,480 –> 00:10:04,160
ماژول دیگری در پروژه ما
252
00:10:04,160 –> 00:10:06,000
ماژول را وارد کرده بود که همچنان به آن
253
00:10:06,000 –> 00:10:09,120
اشاره دارد. شیء ماژول قدیمی
254
00:10:09,120 –> 00:10:10,959
به همین دلیل است که برای چنین موارد استفاده ای باید
255
00:10:10,959 –> 00:10:12,800
از تابع بارگذاری مجدد ارائه شده توسط
256
00:10:12,800 –> 00:10:15,120
ماژول import lib
257
00:10:15,120 –> 00:10:17,360
به جای ایجاد یک ماژول جدید استفاده کنید.
258
00:10:17,360 –> 00:10:19,440
259
00:10:19,440 –> 00:10:21,440
260
00:10:21,440 –> 00:10:23,040
261
00:10:23,040 –> 00:10:24,959
قادر به
262
00:10:24,959 –> 00:10:27,279
دیدن تغییرات
263
00:10:27,279 –> 00:10:29,120
import lib همچنین بسیاری از توابع مفید دیگر را ارائه می دهد
264
00:10:29,120 –> 00:10:31,760
265
00:10:31,760 –> 00:10:33,600
تابع ماژول می تواند برای
266
00:10:33,600 –> 00:10:35,600
وارد کردن دستی یک ماژول بدون استفاده از
267
00:10:35,600 –> 00:10:37,600
268
00:10:37,600 –> 00:10:39,440
عبارت import
269
00:10:39,440 –> 00:10:42,320
270
00:10:42,320 –> 00:10:44,320
271
00:10:44,320 –> 00:10:47,200
استفاده شود. دستور import که
272
00:10:47,200 –> 00:10:48,959
ما کد منبع را خودمان کامپایل و اجرا می
273
00:10:48,959 –> 00:10:51,120
کنیم
274
00:10:51,120 –> 00:10:52,880
در اینجا ما یک فایل با یک
275
00:10:52,880 –> 00:10:54,640
تعریف داریم که
276
00:10:54,640 –> 00:10:56,079
این عبارت خواهد بود ماژول e را که
277
00:10:56,079 –> 00:10:58,480
278
00:10:58,800 –> 00:11:00,959
در فایل اصلی خود وارد می کنیم، یک نام و
279
00:11:00,959 –> 00:11:04,399
مسیر به فایل ماژول در دو متغیر ذخیره
280
00:11:04,399 –> 00:11:05,839
می کنیم. فقط یک مقدار تصادفی را به عنوان
281
00:11:05,839 –> 00:11:08,079
نام ماژول تنظیم می کنیم که معمولاً
282
00:11:08,079 –> 00:11:11,040
نام فایل ماژول بدون.py
283
00:11:11,040 –> 00:11:13,279
خواهد بود. یک شی ماژول با استفاده از
284
00:11:13,279 –> 00:11:15,760
کلاس نوع ماژول
285
00:11:15,760 –> 00:11:17,600
و ویژگی فایل dunder
286
00:11:17,600 –> 00:11:19,360
این شی ماژول را روی مسیر سیستم فایل مطلق ماژول خود قرار می دهیم،
287
00:11:19,360 –> 00:11:21,120
288
00:11:21,120 –> 00:11:24,320
درست مانند نحوه انجام این کار توسط پایتون،
289
00:11:24,320 –> 00:11:27,920
سپس ورودی را در کلید کش sys.modules اضافه می کنیم
290
00:11:27,920 –> 00:11:29,839
، نام ماژول و
291
00:11:29,839 –> 00:11:32,240
مقدار شی ماژول است که
292
00:11:32,240 –> 00:11:34,320
بعد فایل ماژول را باز می کنیم و
293
00:11:34,320 –> 00:11:37,360
کل محتوای
294
00:11:40,320 –> 00:11:42,320
آن را می خوانیم سپس این کد منبع را با استفاده
295
00:11:42,320 –> 00:11:45,120
از
296
00:11:45,120 –> 00:11:47,120
تابع کامپایل داخلی کامپایل می کنیم یک شی کد را برمی گرداند
297
00:11:47,120 –> 00:11:48,880
که می تواند با استفاده از تابع exec اجرا شود.
298
00:11:48,880 –> 00:11:50,800
299
00:11:50,800 –> 00:11:52,560
300
00:11:52,560 –> 00:11:56,000
اجرای پویا
301
00:11:56,000 –> 00:11:58,160
گام کامپایل جداگانه کد پایتون ضروری نیست
302
00:11:58,160 –> 00:11:59,760
زیرا تابع exec می تواند در داخل این کار را انجام دهد،
303
00:11:59,760 –> 00:12:01,680
304
00:12:01,680 –> 00:12:03,760
ما همچنین دیک dunder شی ماژول را
305
00:12:03,760 –> 00:12:05,519
به تابع دقیق منتقل می کنیم تا به عنوان namespa استفاده شود.
306
00:12:05,519 –> 00:12:08,720
ce برای اجرای شی کد،
307
00:12:08,720 –> 00:12:10,480
اکنون میتوانیم تابع sayhello
308
00:12:10,480 –> 00:12:12,480
تعریف شده در ماژول 1 را با استفاده از
309
00:12:12,480 –> 00:12:13,760
شی ماژول که ایجاد کردهایم فراخوانی کنیم،
310
00:12:13,760 –> 00:12:15,279
درست مثل اینکه اگر آن را با استفاده از عبارت import وارد کرده بودیم،
311
00:12:15,279 –> 00:12:17,760
312
00:12:17,760 –> 00:12:19,839
پایتون از چند نحو مختلف
313
00:12:19,839 –> 00:12:21,839
برای وارد کردن کد پشتیبانی میکند.
314
00:12:21,839 –> 00:12:23,440
315
00:12:23,440 –> 00:12:26,000
دستور import
316
00:12:26,000 –> 00:12:28,000
در sys.modules بررسی میکند تا ببیند آیا
317
00:12:28,000 –> 00:12:30,720
ماژول قبلاً بارگذاری شده است،
318
00:12:30,720 –> 00:12:32,320
اگر در آنجا وجود دارد
319
00:12:32,320 –> 00:12:35,440
،
320
00:12:35,440 –> 00:12:37,279
اگر ماژول کامپایل و اجرا نشده باشد، در صورتی که ماژول کامپایل و
321
00:12:37,279 –> 00:12:39,680
اجرا نشده باشد، ورودی شی ماژول
322
00:12:39,680 –> 00:12:42,240
در sys.modules اضافه میشود یا خیر. یک
323
00:12:42,240 –> 00:12:44,079
نماد یا متغیر جدید در
324
00:12:44,079 –> 00:12:47,200
فضای نام سراسری ماژول فعلی ما ایجاد میشود،
325
00:12:47,200 –> 00:12:48,959
توجه داشته باشید که وقتی ماژول کامپایل
326
00:12:48,959 –> 00:12:52,160
میشود، فقط یک شی نیست که ایجاد میشود،
327
00:12:52,160 –> 00:12:53,920
اشیاء مربوط به تمام کلاسهای
328
00:12:53,920 –> 00:12:55,680
توابع متغیرهای تعریفشده جهانی
329
00:12:55,680 –> 00:12:59,120
و غیره نیز ایجاد میشوند،
330
00:12:59,120 –> 00:13:01,279
برای مثال ماژول سوکت
331
00:13:01,279 –> 00:13:03,760
تابع gethostname را تعریف میکند.
332
00:13:03,760 –> 00:13:05,680
بنابراین یک شی تابع در
333
00:13:05,680 –> 00:13:07,519
334
00:13:07,519 –> 00:13:09,279
فرهنگ لغت ماژول های سوکت حافظه ایجاد می شود
335
00:13:09,279 –> 00:13:12,000
که به این شی تابع اشاره دارد
336
00:13:12,000 –> 00:13:14,000
اگر سوکت را بهعنوان سوکت زیر خط من وارد کنید
337
00:13:14,000 –> 00:13:15,680
، نام نماد و
338
00:13:15,680 –> 00:13:17,440
فضای نام فعلی به جای سوکت، سوکت زیرخط من خواهد بود،
339
00:13:17,440 –> 00:13:19,680
340
00:13:19,680 –> 00:13:21,760
اگر از سوکت وارد کردن gethostname انجام دهید
341
00:13:21,760 –> 00:13:23,279
، فضای نام فعلی
342
00:13:23,279 –> 00:13:24,720
فقط نماد gethostname
343
00:13:24,720 –> 00:13:25,839
را خواهد داشت که ارجاعی به
344
00:13:25,839 –> 00:13:27,839
شی تابع خواهد بود.
345
00:13:27,839 –> 00:13:29,680
توجه داشته باشید که حتی در این حالت کل
346
00:13:29,680 –> 00:13:31,680
ماژول بارگذاری می شود
347
00:13:31,680 –> 00:13:34,560
، بارگیری جزئی وجود ندارد،
348
00:13:34,560 –> 00:13:36,320
فقط ماژول فعلی فقط به آن تابع خاص دسترسی دارد،
349
00:13:36,320 –> 00:13:38,959
350
00:13:38,959 –> 00:13:40,880
همچنین می توانید ویژگی های خاص را
351
00:13:40,880 –> 00:13:43,600
با نامی متفاوت
352
00:13:45,519 –> 00:13:47,360
از سوکت import وارد کنید ستاره
353
00:13:47,360 –> 00:13:48,800
نمادهایی را در نام فعلی ایجاد می کند. فضایی برای
354
00:13:48,800 –> 00:13:51,600
همه نمادهای ارائه شده توسط سوکت
355
00:13:51,600 –> 00:13:54,800
، به طور کلی توصیه نمی شود
356
00:13:54,800 –> 00:13:56,560
اگر به ماژول های ریاضی و ریاضی نگاه کنید،
357
00:13:56,560 –> 00:13:58,000
توابع زیادی با همین
358
00:13:58,000 –> 00:14:01,040
نام با استفاده از import وجود دارد، به این ترتیب
359
00:14:01,040 –> 00:14:03,600
نام تابع را از یکی از آنها پنهان می کند،
360
00:14:03,600 –> 00:14:05,360
برخی از افراد از برای واردات ماژول استفاده می کنند.
361
00:14:05,360 –> 00:14:06,959
نحو نماد به این امید که فقط
362
00:14:06,959 –> 00:14:08,480
ماژول را به طور جزئی وارد می کند
363
00:14:08,480 –> 00:14:09,760
و در نتیجه از
364
00:14:09,760 –> 00:14:12,399
عملکرد یا صرفه جویی در حافظه سود می برد.
365
00:14:12,399 –> 00:14:15,440
قبلاً دیده اید که درست نیست در
366
00:14:15,440 –> 00:14:17,519
هر صورت پایتون کل ماژول را کامپایل و
367
00:14:17,519 –> 00:14:20,079
اجرا می
368
00:14:20,079 –> 00:14:21,760
کند. تنها مزیت عملکرد استفاده
369
00:14:21,760 –> 00:14:23,560
از وارد کردن سبک دوم این است که
370
00:14:23,560 –> 00:14:25,199
socket.gethostname به یک
371
00:14:25,199 –> 00:14:26,720
جستجوی اضافی در فرهنگ لغت
372
00:14:26,720 –> 00:14:28,560
ماژول سوکت نیاز دارد تا به شی تابع gethostname برسد.
373
00:14:28,560 –> 00:14:30,800
374
00:14:30,800 –> 00:14:32,880
جستجوی فرهنگ لغت در پایتون بسیار
375
00:14:32,880 –> 00:14:34,560
سریع است و تنها در
376
00:14:34,560 –> 00:14:36,480
377
00:14:36,480 –> 00:14:38,240
صورتی که تابع را میلیونها بار فراخوانی
378
00:14:38,240 –> 00:14:40,160
379
00:14:40,160 –> 00:14:42,079
کنید، ممکن است
380
00:14:42,079 –> 00:14:44,000
مزایای عملکرد قابل
381
00:14:44,000 –> 00:14:45,839
382
00:14:45,839 –> 00:14:48,160
383
00:14:48,160 –> 00:14:51,120
توجهی را مشاهده کنید. در ویژگی dunder name
384
00:14:51,120 –> 00:14:53,000
در اینجا کد من در فایلی به نام
385
00:14:53,000 –> 00:14:54,959
mymodule.py
386
00:14:54,959 –> 00:14:56,800
در تابع sayhello است، من از
387
00:14:56,800 –> 00:14:59,360
متغیر dunder name استفاده میکنم و
388
00:14:59,360 –> 00:15:03,040
در پایان
389
00:15:03,519 –> 00:15:05,360
اگر فایل را مستقیماً با استفاده
390
00:15:05,360 –> 00:15:06,639
از مفسر پایتون اجرا
391
00:15:06,639 –> 00:15:08,160
کنید، آن تابع را فراخوانی میکنم. که مقدار dunder
392
00:15:08,160 –> 00:15:10,959
name انجام شد دامنه
393
00:15:10,959 –> 00:15:12,720
فرض کنید من فایل دیگری در
394
00:15:12,720 –> 00:15:14,880
همان دایرکتوری
395
00:15:14,880 –> 00:15:16,560
دارم که اولین زیرم را وارد می کنم
396
00:15:16,560 –> 00:15:18,560
ماژول هسته در آن
397
00:15:18,560 –> 00:15:20,399
از آنجایی که وارد کردن ماژول کد داخل آن را اجرا می کند،
398
00:15:20,399 –> 00:15:22,560
تابع say hello
399
00:15:22,560 –> 00:15:25,279
فقط با وارد کردن آن اجرا می شود،
400
00:15:25,279 –> 00:15:26,959
اما اگر مقدار dunder name را بررسی کنید، خواهیم دید که مقدار dunder
401
00:15:26,959 –> 00:15:28,720
name ماژول underscore من است که
402
00:15:28,720 –> 00:15:31,120
نام ماژول است.
403
00:15:31,120 –> 00:15:32,639
404
00:15:32,639 –> 00:15:34,48