فضاهای نام و دامنه متغیرها در پایتون

بفرست برای دوستت
Telegram
WhatsApp
فضاهای نام و دامنه در پایتون

فهرست مطالب

فضای نام (namespace) چیست؟

فضای نام، سیستمی است که در آن هر شیء در پایتون، نامی منحصر به فرد دارد. این شیء ممکن است متغیر یا متد باشد. پایتون خودش با استفاده از یک دیکشنری، فضای نام را مدیریت می‌کند.

بیایید این موضوع را با مثالی ساده‌تر در سایت دیتایاد بررسی کنیم؛ مانند ساختار پوشه‌ها و فایل‌ها در کامپیوتر. طبیعتاً می‌توان در پوشه‌های مختلف، فایل‌هایی با نام مشابه داشت. اما فقط در صورتی می‌توان به هر یک از این فایل‌های هم‌نام دسترسی داشت، که مسیر کامل آن را ذکر کنیم.

در مثالی دیگر، فضای نام مثل نام خانوادگی عمل می‌کند. شاید در یک کلاس، چندین نفر به نام “آلیس” باشند، اما وقتی از “آلیس لی” یا “آلیس کلارک” صحبت می‌کنیم، فقط یک نفر مشخص می‌شود (با فرض اینکه نام و نام خانوادگی یکسان برای چند دانش‌آموز وجود ندارد).

مفسر پایتون هم بر اساس فضای نام می‌فهمد که دقیقاً به کدام متد یا متغیر در کد اشاره می‌کنید.

تفکیک کلمه namespace، اطلاعات بیشتری به ما می‌دهد. “نام” (name) (به معنی شناسه‌ای منحصر به فرد) به اضافه “فضا” (space) (که به دامنه‌ اسم اشاره دارد). در اینجا، “نام” می‌تواند به هر متد یا متغیر پایتونی اشاره داشته باشد و “فضا” به مکانی که شخص می‌خواهد از آنجا به آن متغیر یا متد دسترسی پیدا کند، مرتبط است.

 

  ساختاردهی به برنامه‌ های پایتون

انواع فضاهای نام در پایتون

هنگامی که مفسر پایتون بدون استفاده از ماژول‌ها، متدها، کلاس‌ها و… ساخته شده توسط کاربر اجرا می‌شود، برخی توابع مانند print()، ()id همیشه وجود دارند و در دسترس هستند، و این‌ها فضاهای نام داخلی (built-in) هستند.

وقتی کاربر یک ماژول ایجاد می‌کند، یک فضای نام سراسری (جهانی – global) ایجاد می‌شود، و سپس با ایجاد توابع محلی، فضای نام محلی (local) به وجود می‌آید. فضای نام داخلی (built-in) فضای نام سراسری (global) را در برمی‌گیرد و فضای نام سراسری نیز فضای نام محلی (local) را در برمی‌گیرد.

فضای نام در پایتون

 

طول عمر یک فضای نام

طول عمر یک فضای نام به دامنه اشیاء بستگی دارد، اگر دامنه یک شیء به پایان برسد، طول عمر آن فضای نام نیز به پایان می‌رسد. بنابراین، دسترسی به اشیاء یک فضای نام داخلی از یک فضای نام خارجی ممکن نیست.

مثال:

# var1 is in the global namespace 
var1 = 5
def some_func():

	# var2 is in the local namespace 
	var2 = 6
	def some_inner_func():

		# var3 is in the nested local 
		# namespace
		var3 = 7

 

  کلیدواژه‌های پایتون - بخش دوم

همانطور که در شکل زیر نشان داده شده است، یک نام شیء یکسان می‌تواند در چندین فضای نام مختلف وجود داشته باشد، اگر که ایزولاسیون بین نام‌های یکسان توسط فضای نام آن‌ها حفظ شود.

ایزولاسیون اشیاء در پایتون

 

اگر بخواهید متغیرهای سراسری را پردازش و یا به‌روزرسانی کنید، همانطور که در مثال زیر نشان داده شده است، باید به صراحت آن متغیر را به عنوان جهانی علامت‌گذاری کنید و سپس به‌روزرسانی یا پردازش را انجام دهید. توجه داشته باشید که خط “count = count + 1” به متغیر سراسری ارجاع می‌دهد و بنابراین از متغیر سراسری استفاده می‌کند.

می توانید خط global countرا حذف کرده و به جای آن عبارت count = 1 را بنویسید و خروجی اجرای برنامه را ببینید. سپس خواهید دید که اعلام global بودن در خط “global count” بر اساس قوانین دامنه کاملاً ضروری است. 

# Python program processing
# global variable

count = 5
def some_method():
	global count
	count = count + 1
	print(count)
some_method()
print(count)

 

  چگونه در پایتون بدون انتقال به خط جدید، خروجی را چاپ کنیم؟

خروجی:

6
6

دامنه اشیاء در پایتون

دامنه به ناحیه کدنویسی اشاره دارد که از آنجا می‌توان به یک شیء خاص پایتون دسترسی داشت. بنابراین نمی‌توان از هر نقطه‌ای از کد به یک شیء خاص دسترسی پیدا کرد، دسترسی باید توسط دامنه شیء مجاز باشد.

بیایید با یک مثال به درک دقیق‌تری از این موضوع دست پیدا کنیم:

مثال: 

# Python program showing
# a scope of object

def some_func():
	print("Inside some_func")
	def some_inner_func():
		var = 10
		print("Inside inner function, value of var:",var)
	some_inner_func()
	print("Try printing var from outer function: ",var)
some_func()

 

خروجی:

Inside some_func
Inside inner function, value of var: 10

Traceback (most recent call last):
  File "/home/1eb47bb3eac2fa36d6bfe5d349dfcb84.py", line 8, in 
    some_func()
  File "/home/1eb47bb3eac2fa36d6bfe5d349dfcb84.py", line 7, in some_func
    print("Try printing var from outer function: ",var)
NameError: name 'var' is not defined

Rating 5.00 from 1 votes

لیست دروس دوره

آموزش پیشنهادی و مکمل

اگر سوالی در مورد این درس دارید، در کادر زیر بنویسید.

guest
0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
سبد خرید

جشنواره دوره جامع متخصص علم داده شروع شد

برای دیدن نوشته هایی که دنبال آن هستید تایپ کنید.
×