در این مطلب، ویدئو عجیب بودن جستجوی متغیر محلی و جهانی در پایتون با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:05:15
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,399 –> 00:00:02,639
سلام و خوش آمدید من جیمز مورفی هستم و
2
00:00:02,639 –> 00:00:04,319
امروز به
3
00:00:04,319 –> 00:00:06,160
یک قانون ظریف که پایتون در مورد
4
00:00:06,160 –> 00:00:07,839
دامنه های متغیر دارد
5
00:00:07,839 –> 00:00:10,320
6
00:00:10,320 –> 00:00:11,840
7
00:00:11,840 –> 00:00:13,920
8
00:00:13,920 –> 00:00:15,280
نگاهی می اندازیم.
9
00:00:15,280 –> 00:00:17,119
چه چیزی قرار است چاپ کند
10
00:00:17,119 –> 00:00:19,680
یا چه خطایی قرار است بدهد،
11
00:00:19,680 –> 00:00:21,279
بیایید با f شروع کنیم به نظر شما چه
12
00:00:21,279 –> 00:00:23,119
اتفاقی میافتد وقتی آن را خوب اجرا میکنیم
13
00:00:23,119 –> 00:00:24,800
، البته وقتی آن را اجرا میکنیم یک
14
00:00:24,800 –> 00:00:26,160
خطا میگیریم بهخصوص یک
15
00:00:26,160 –> 00:00:29,119
خطای نام، خوب اولین مورد واقعاً
16
00:00:29,119 –> 00:00:29,599
آسان بود.
17
00:00:29,599 –> 00:00:31,519
مورد دوم g این است که
18
00:00:31,519 –> 00:00:34,239
با f متفاوت
19
00:00:35,120 –> 00:00:38,160
است البته ما هنوز یک خطا دریافت می کنیم،
20
00:00:38,160 –> 00:00:40,960
اما در واقع یک خطای متفاوت است،
21
00:00:40,960 –> 00:00:43,040
اکنون خطای محلی unbound فنی
22
00:00:43,040 –> 00:00:44,559
از خطای نام ناشی می شود،
23
00:00:44,559 –> 00:00:46,320
اما فکر می کنم ممکن است برای
24
00:00:46,320 –> 00:00:47,920
بسیاری از شما تعجب آور باشد که اصلاً اتفاقی متفاوت
25
00:00:47,920 –> 00:00:49,840
افتاده است.
26
00:00:49,840 –> 00:00:52,480
به نوعی پایتون میدانست که من
27
00:00:52,480 –> 00:00:53,680
میخواهم بعداً در تابع به x نسبت
28
00:00:53,680 –> 00:00:57,280
29
00:00:57,280 –> 00:00:59,199
بدهم، معمولاً در پایتون خارج از یک زمینه حلقهای، ما
30
00:00:59,199 –> 00:01:01,120
انتظار نداریم که عباراتی در تابعی که
31
00:01:01,120 –> 00:01:02,160
بعداً در تابع هستند،
32
00:01:02,160 –> 00:01:04,000
روی عباراتی که هستند تأثیر بگذارد. در ابتدا
33
00:01:04,000 –> 00:01:05,840
در تابع
34
00:01:05,840 –> 00:01:07,760
مشخص می شود که آیا
35
00:01:07,760 –> 00:01:09,360
متغیری مانند x
36
00:01:09,360 –> 00:01:11,760
به عنوان یک متغیر آزاد تعیین می شود یا یک
37
00:01:11,760 –> 00:01:13,040
متغیر محلی
38
00:01:13,040 –> 00:01:15,840
در واقع در زمان کامپایل تعیین می شود
39
00:01:15,840 –> 00:01:18,080
نه در زمان اجرا
40
00:01:18,080 –> 00:01:19,840
در تابع f هیچ
41
00:01:19,840 –> 00:01:21,439
تخصیصی به متغیر x وجود ندارد
42
00:01:21,439 –> 00:01:24,320
بنابراین x است. مشخص شده است که یک متغیر آزاد است، به
43
00:01:24,320 –> 00:01:26,000
این معنی که وقتی می گوییم print
44
00:01:26,000 –> 00:01:28,240
x سعی می کند x را در دامنه جهانی جستجو کند
45
00:01:28,240 –> 00:01:29,840
و در g شکست می خورد،
46
00:01:29,840 –> 00:01:32,320
اما تابع حاوی
47
00:01:32,320 –> 00:01:33,439
یک انتساب برای x است
48
00:01:33,439 –> 00:01:36,320
، می گوید x برابر با 1 است. بنابراین این بدان معناست که
49
00:01:36,320 –> 00:01:37,759
در تابع g
50
00:01:37,759 –> 00:01:40,799
x مشخص شده است که یک متغیر محلی است، به
51
00:01:40,799 –> 00:01:42,640
این معنی که وقتی میخواهیم x را چاپ
52
00:01:42,640 –> 00:01:44,720
کنیم، آن را در محدوده محلی جستجو میکند
53
00:01:44,720 –> 00:01:46,960
و از این رو یک خطای محلی دریافت میکنیم نه یک
54
00:01:46,960 –> 00:01:48,320
خطای سراسری
55
00:01:48,320 –> 00:01:49,920
با در نظر گرفتن این موضوع، بیایید به
56
00:01:49,920 –> 00:01:51,680
دو مثال دیگر نگاه کنیم و ببینیم
57
00:01:51,680 –> 00:01:52,960
آنها درست
58
00:01:52,960 –> 00:01:55,840
فکر می کنید چه اتفاقی می افتد وقتی h را صدا می
59
00:01:55,840 –> 00:01:57,680
زنیم،
60
00:01:57,680 –> 00:02:00,240
قبل از تعریف تابع، متغیر سراسری y را برابر با 0 تعریف کرده
61
00:02:00,240 –> 00:02:01,680
ایم و سپس سعی می کنیم y را
62
00:02:01,680 –> 00:02:06,560
در تابع چاپ کنیم ادامه دهید فقط فریاد بزنید
63
00:02:06,560 –> 00:02:08,720
خوب این یکی دیگر آسان بود که صفر نه چاپ می
64
00:02:08,720 –> 00:02:09,919
شود.
65
00:02:09,919 –> 00:02:11,920
فکر میکنید برای تابع j چه اتفاقی میافتد
66
00:02:11,920 –> 00:02:14,319
67
00:02:14,400 –> 00:02:17,680
، صبر کنید،
68
00:02:17,680 –> 00:02:19,599
خوب آیا حدس خود را قفل کردهاید در اینجا
69
00:02:19,599 –> 00:02:23,120
میرویم
70
00:02:23,120 –> 00:02:25,760
وقتی تابع j را اجرا میکنم، یک
71
00:02:25,760 –> 00:02:27,920
خطای محلی unbound دیگر دریافت
72
00:02:27,920 –> 00:02:30,319
میکنم حالا ممکن است به این نگاه کنید و بگویید
73
00:02:30,319 –> 00:02:31,519
وقتی تماس میگیرم j
74
00:02:31,519 –> 00:02:33,680
ما این متغیر سراسری y را داریم که
75
00:02:33,680 –> 00:02:35,040
صفر تعریف شده است،
76
00:02:35,040 –> 00:02:37,280
بنابراین print y باید
77
00:02:37,280 –> 00:02:39,040
مانند حالت قبلی 0 را چاپ کند،
78
00:02:39,040 –> 00:02:40,959
اما قوانین جستجوی متغیر اینطور کار نمی
79
00:02:40,959 –> 00:02:42,400
کنند
80
00:02:42,400 –> 00:02:44,319
زیرا جایی در تابع j
81
00:02:44,319 –> 00:02:46,480
به y یک