کلیدواژه global در پایتون – به زبان ساده
پیش از این، در مطلب «دامنه متغیرها در پایتون — به زبان ساده»، به مفهوم متغیر محلی، سراسری و غیر محلی پرداخته و مثالهای متعددی برای هر یک از حالات بیان شد. در این مطلب، مفهوم کلیدواژه global در پایتون همراه با مثالهای متنوع بیان شده است.
کلیدواژه global در پایتون
کلیدواژه global در پایتون برای ویرایش متغیر بیرون از دامنه کنونی مورد استفاده قرار میگیرد. این متغیر، برای ساخت یک «متغیر سراسری» (Global Variable) و انجام تغییراتی روی متغیر در زمینه محلی استفاده میشود.
قواعد کلیدواژه global
قواعد پایهای برای تعیین کلیدواژه سراسری در پایتون، در ادامه بیان شدهاند.
- هنگامی که یک متغیر درون تابع ساخته میشود، به طور پیشفرض محلی است.
- هنگامی که یک متغیر بیرون از تابع تعریف میشود، به طور پیشفرض سراسری است و نیازی به استفاده از کلیدواژه global در پایتون نیست.
- از کلیدواژه global در پایتون برای خواندن و نوشتن یک متغیر سراسری درون یک تابع استفاده میشود.
- استفاده از کلیدواژه global بیرون از تابع، هیچ اثری ندارد.
استفاده از کلیدواژه global در پایتون
در ادامه، مثالهایی پیرامون چگونگی استفاده از متغیر global در پایتون، آورده شده است.
مثال ۱: دسترسی به متغیر global در پایتون از درون یک تابع
خروجی حاصل از اجرای برنامه بالا، به صورت زیر خواهد بود.
1
گاهی ممکن است بنا به دلایلی، نیاز به ویرایش متغیر سراسری از داخل یک تابع وجود داشته باشد. در مثال زیر، این کار انجام شده است.
مثال ۲: ویرایش متغیر global در پایتون و از درون یک تابع
خروجی حاصل از اجرای برنامه بالا، به صورت زیر خواهد بود. در واقع، پس از اجرای برنامه بالا، یک پیغام خطا نمایش داده میشود.
UnboundLocalError: local variable 'c' referenced before assignment
به همین دلیل است که به متغیر سراسری فقط میتوان از درون تابع دسترسی داشت؛ اما نمیتوان آن را از درون تابع ویرایش کرد. راهکاری برای این مساله، استفاده از کلیدواژه global در پایتون است.
مثال ۳: تغییر متغیر سراسری از درون یک تابع با استفاده از global
خروجی حاصل از اجرای قطعه کد بالا، به صورت زیر است.
Inside add(): 2 In main: 2
در برنامه بالا، c به عنوان یک کلیدواژه سراسری، درون تابع ()add بعد از def در پایتون تعریف شده است. سپس، متغیر c، دو تا افزایش داده میشود (c = c + 2). پس از آن، تابع ()add فراخوانی میشود. در نهایت، متغیر سراسری c چاپ میشود. همانطور که مشهود است، تغییرات روی متغیر سراسری بیرون از تابع c = 2 نیز انجام میشوند. در پایتون، یک ماژول مجرد config.py برای نگه داشتن متغیر سراسری و به اشتراکگذاری اطلاعات در سراسر ماژولهای پایتون در همان برنامه، مورد استفاده قرار میگیرد. در ادامه، مثالی از چگونگی استفاده از متغیر سراسری در ماژولهای پایتون آورده شده است.
مثال ۴: به اشتراکگذاری یک متغیر سراسری درون ماژولهای پایتون
یک فایل config.py برای ذخیرهسازی متغیرهای سراسری ساخته میشود.
یک فایل update.py برای تغییر متغیرهای محلی ساخته میشود.
یک فایل main.py برای تست تغییرات مقادیر ساخته میشود.
هنگام اجرای فایل main.py، خروجی به صورت زیر خواهد بود.
10 alphabet
در مثال بالا، سه فایل ساخته شده است: update.py، config.py و main.py. ماژول config.py، متغیرهای محلی a و b را ذخیره میکند. در فایل update.py، ماژول config.py را باید وارد (ایمپورت | Import) و مقدار a و b را ویرایش کرد. به طور مشابه، در فایل main.py، ماژولهای config.py و update.py را باید وارد کرد. در نهایت، مقادیر متغیرهای سراسری چاپ و بررسی میشوند که آیا تغییر کردهاند یا خیر.
متغیر سراسری در توابع تو در تو
در اینجا، روش استفاده از متغیر سراسری در توابع تو در تو بیان شده است.
خروجی حاصل از اجرای کد بالا، به صورت زیر است.
Before calling bar: 20 Calling bar now After calling bar: 20 x in main : 25
در برنامه بالا، متغیر سراسری درون تابع تو در تو ()bar تعریف شده است. درون تابع ()foo، متغیر x هیچ تاثیری از کلیدواژه سراسری ندارد. پیش و پس از فراخوانی ()bar، متغیر x مقدار متغیر محلی را دریافت میکند (x = 20). بیرون از تابع ()foo، متغیر x مقدار تعریف شده در تابع ()bar را میگیرد (x = 25). این امر بدین دلیل به وقوع میپیوندد که از کلیدواژه global در پایتون در x برای ساخت متغیر سراسری درون تابع ()bar استفاده میشود (دامنه محلی). اگر هر گونه تغییری در تابع ()bar رخ بدهد، تغییرات بیرون از دامنه محلی نیر نمایش داده خواهند شد (()foo).
اگر نوشته بالا برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
مشکلم رو حل کرد
عالی و کاربردی بود ممنونم
سلام و عرض ادب خیلی جامع و مفید و ساده بود. من چقدر سخت میگرفتمش و چه کد های کثیفی مینوشتم! از دیکشنری بگیر تا فایل txt که :))) بعد فکر میکردم پایتون اینطور قابلیتی نداره
باید برم سر بزارم به بیابون و به اعمال بدم فکر کنم که انقدر از کلمه برنامه نویس بودن روی اسمم خجالت میکشم