وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

Local و متغیرهای جهانی در پایتون

0 19
زمان لازم برای مطالعه: 4 دقیقه


یکی از عناصر اساسی زبان های برنامه نویسی متغیرها هستند. به زبان ساده، یک متغیر یک لایه انتزاعی برای سلول های حافظه است که حاوی مقدار واقعی است. برای ما، به عنوان یک توسعه دهنده، به خاطر سپردن نام سلول حافظه آسان تر از به خاطر سپردن آدرس حافظه فیزیکی آن است. یک نام معتبر می‌تواند از نویسه‌های «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

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید