از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
Local و متغیرهای جهانی در پایتون
سرفصلهای مطلب
یکی از عناصر اساسی زبان های برنامه نویسی متغیرها هستند. به زبان ساده، یک متغیر یک لایه انتزاعی برای سلول های حافظه است که حاوی مقدار واقعی است. برای ما، به عنوان یک توسعه دهنده، به خاطر سپردن نام سلول حافظه آسان تر از به خاطر سپردن آدرس حافظه فیزیکی آن است. یک نام معتبر میتواند از نویسههای «a» تا «z» (در حروف کوچک و بزرگ) و همچنین اعداد باشد. هیچ فاصله یا کاراکتر خاصی مانند umlaut و خط تیره در نام مجاز نیست.
علاوه بر این، متغیرها دارای یک نوع داده خاص مانند رشته ها (کاراکترها)، ارقام، لیست ها یا ارجاع به متغیرهای دیگر هستند. در پایتون، ممکن است از همان متغیر برای ذخیره مقادیر از هر نوع استفاده مجدد کنیم. نوع به طور خودکار با مقداری که به نام اختصاص داده می شود تعیین می شود. برای تعریف یک متغیر با یک مقدار خاص، به سادگی این مقدار را به یک نام به صورت زیر اختصاص دهید:
age = 42
name = "Dominic"
places = ("Berlin", "Cape Town", "New York")
مفسر پایتون سه متغیر را ایجاد می کند age
، name
، و places
، و مقدار 42 را به متغیر اول و “Dominic” را به متغیر دوم اختصاص می دهد و places
لیستی از سه عنصر می شود که شامل رشته های “برلین”، “کیپ تاون” و “نیویورک” است.
فضاهای نام
همه متغیرهای بالا بخشی از فضای نام یکسان هستند و بنابراین دامنه یکسانی دارند. مگر اینکه بعداً به عنوان یک متغیر محلی دوباره تعریف شود روی، متغیری که در برنامه اصلی تعریف شده است متعلق به فضای نام جهانی است که توسط هر تابعی در برنامه پایتون شما قابل دسترسی است. کد مثال زیر این را نشان می دهد و از دو متغیر استفاده می کند name
و age
در تابع info()
.
age = 42
name = "Dominic"
places = ("Berlin", "Cape Town", "New York")
def info():
print("%s is %i years old." % (name, age))
return
info()
خروجی شامل خط واحدی است که از print
بیانیه در تابع info()
:
$ python3 global.py
Dominic is 42 years old.
برای دقیق تر، هر ماژول، کلاس و تابع فضای نام خاص خود را دارد و متغیرها به صورت محلی به آن محدود می شوند. در مثال بعدی از دو فضای نام استفاده می کنیم – فضای خارجی، جهانی از برنامه اصلی و داخلی، محلی از تابعی که به سادگی نامگذاری شده است. output()
. متغیر place
در برنامه اصلی (خط 6) وجود دارد و به عنوان یک متغیر محلی با مقدار جدید در خط 2 تابع دوباره تعریف می شود. output()
.
def output():
place = "Cape Town"
print("%s lives in %s." % (name, place))
return
place = "Berlin"
name = "Dominic"
print("%s lives in %s." % (name, place))
output()
خروجی از این دو خط تشکیل شده است، در حالی که خط اول از برنامه اصلی (خط 8) و خط دوم از برنامه اصلی منشا می گیرد. print
عبارت در خط 3 در تابع output()
. در ابتدا دو متغیر name
و place
در برنامه اصلی (خط 6 و 7) تعریف شده و با استفاده از آن چاپ می شوند stdout
. تماس گرفتن با output()
تابع، متغیر place
به صورت محلی در خط 2 و name
در عوض از فضای نام جهانی می آید. این منجر به خروجی مطابق شکل زیر می شود.
$ python3 localscope.py
Dominic lives in Berlin.
Dominic lives in Cape Town.
تغییر متغیرهای جهانی در یک فضای نام متفاوت
مقدار یک متغیر سراسری در کل برنامه قابل دسترسی است. به منظور دستیابی به آن از درون توابع، پایتون استفاده از کلمه کلیدی را ارائه می دهد global
. تابع زیر روش استفاده از آن و وارد کردن متغیر را نشان می دهد name
در فضای نام تابع:
def location():
global place
place = "Cape Town"
return
place = "Berlin"
print(place)
location()
print(place)
متغیر place
قبلاً در برنامه اصلی (خط 6) تعریف شده است. با استفاده از کلمه کلیدی global
در خط 2، متغیر در تابع در دسترس می شود location()
و بلافاصله می توان آن را روی مقدار دیگری تنظیم کرد (خط 3). خروجی کد در اینجا نشان داده شده است:
$ python3 globalscope.py
Berlin
Cape Town
بدون استفاده از کلمه کلیدی global
همانطور که در خط 2، متغیر مشاهده می شود place
به عنوان یک متغیر محلی در تابع در نظر گرفته می شود location()
در عوض و متغیر place
از برنامه اصلی بدون تغییر است.
محدوده یک متغیر را تشخیص دهید
پایتون دو متد داخلی به نام دارد globals()
و locals()
. آنها به شما اجازه می دهند تعیین کنید که آیا یک متغیر بخشی از فضای نام جهانی است یا فضای نام محلی. مثال زیر روش استفاده از این روش ها را نشان می دهد:
def calculation():
"do a complex calculation"
global place
place = "Cape Town"
name = "John"
print("place in global:", 'place' in globals())
print("place in local :", 'place' in locals())
print("name in global :", 'name' in globals())
print("name in local :", 'name' in locals())
return
place = "Berlin"
print(place)
calculation()
خروجی به صورت زیر است و دامنه دو متغیر را نشان می دهد place
و name
داخل تابع calculation()
:
$ python3 variablelist.py
Berlin
place in global: True
place in local : False
name in global : False
name in local : True
استفاده از متغیرهای جهانی در عمل
استفاده و اصلاح متغیرهای سراسری از توابع داخلی به عنوان یک سبک برنامه نویسی بسیار بد در نظر گرفته می شود، زیرا باعث ایجاد عوارض جانبی می شود که تشخیص آنها نسبتاً دشوار است. اکیداً توصیه می شود به جای آن از پارامترهای تابع مناسب استفاده کنید.
سپاسگزاریها
نویسنده مایل است از Mandy Neumeyer برای حمایت او در هنگام تهیه مقاله تشکر کند.
پیوندها و مراجع
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-28 01:08:05