English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
در این مقاله، شما خواهید آموخت که پایتون متغیرهای global، محلی، غیرمحلی و در کجا از آنها استفاده میشود.
در پایتون، متغیرهایی که در خارج از یک تابع یا در محدودهی global تعریف میشوند، به عنوان متغیرهای global شناخته میشوند. این به این معناست که میتوان از متغیرهای global در داخل یا خارج از یک تابع دسترسی پیدا کرد.
دعونا نرى مثالاً على كيفية إنشاء متغيرات عالمية في بيثون.
x = "گلوبال" def foo(): چاپ("محلی x:", x) foo() چاپ("غیرمحلی x:", x)
عندما نقوم بتشغيل الكود، سيتم إظهار ما يلي:
محلی x: global غیرمحلی x: global
در کد بالا، ماxبه عنوان متغیر global ایجاد شده و foo() را برای چاپ متغیر global تعریف کردهایمx، در نهایت، ما foo() را فراخوانی میکنیم که چاپ خواهد کردxتغییر دهید.
اگر میخواهید در داخل تابع مقدارxمقدار آن چیست؟
x = "گلوبال" def foo(): x = x * 2 چاپ(x) foo()
عندما نقوم بتشغيل الكود، سيتم إظهار ما يلي:
UnboundLocalError: متغیر محلی 'x' قبل از تعریف به آن اشاره شده است
خروجی یک خطا نشان میدهد، زیرا پایتون x را به عنوان یک متغیر محلی در نظر میگیرد و x نیز در foo() تعریف نشده است.
برای انجام این کار، ما از کلیدهای global استفاده کردیم. برای اطلاعات بیشتر، لطفاً بهکلیدهای global پایتون.
متغیرهایی که در داخل یک تابع یا محدودهی محلی تعریف میشوند، به عنوان متغیرهای محلی شناخته میشوند.
def foo(): y = "محلی" foo() چاپ(y)
عندما نقوم بتشغيل الكود، سيتم إظهار ما يلي:
NameError: نام 'y' تعریف نشده است
خروجی یک خطا نشان میدهد، زیرا ما سعی کردیم به یک متغیر محلی y در محدودهی global دسترسی پیدا کنیم، و متغیر محلی فقط در foo() یا محدودهی محلی کار میکند.
بیایید به یک مثال از ایجاد متغیر محلی در پایتون نگاه کنیم.
معمولاً، ما یک متغیر را در داخل یک تابع برای ایجاد متغیر محلی تعریف میکنیم.
def foo(): y = "محلی" چاپ(y) foo()
وقتی که ما کد را اجرا میکنیم، آن را چاپ خواهد کرد:
محلی
بیایید ببینیممشکل قبلی، که در آنxیک متغیر全局 است، ما میخواهیم در داخل foo() آن را تغییر دهیمx.
در اینجا، ما نشان میدهیم که چگونه میتوان در یک کد از متغیرهای全局 و محلی استفاده کرد.
x = "گلوبال" def foo(): گلوبال x y = "محلی" x = x * 2 چاپ(x) چاپ(y) foo()
عندما نقوم بتشغيل الكود، سيتم إظهار ما يلي:
گلوبال گلوبال محلی
در کد بالا، ما x را به عنوان متغیر全局 تعریف کردیم، و y را به عنوان متغیر محلی در foo() تعریف کردیم. سپس، ما از علامت عملگر ضرب * برای تغییر متغیر全局 x و همچنین چاپ x و y استفاده کردیم.
بعد از فراخوانی foo()، مقدار x به global global تغییر کرد، زیرا ما از x * 2 برای چاپ دو بار global استفاده کردیم. سپس، ما مقدار متغیر محلی y را چاپ کردیم، یعنی متغیر محلی.
x = 5 def foo(): x = 10 print("local x:", x) foo() print("global x:", x)
عندما نقوم بتشغيل الكود، سيتم إظهار ما يلي:
local x: 10 global x: 5
في الكود أعلاه، استخدمنا نفس الاسم x للمتغيرات العالمية والمحلية. عندما نقوم بطباعة نفس المتغير، سنحصل على نتائج مختلفة، لأن المتغير تم تخصيصه في نطاقين مختلفين، وهو نطاق المحلية في foo() ونطاق العالمي خارج foo().
عندما نقوم بطباعة المتغير داخل foo()، سيتم إظهار local x: 10. يُدعى هذا نطاق المتغير المحلي.
على نفس النحو، عندما نقوم بطباعة المتغير خارج foo()، سيتم إظهار global x: 5. يُدعى هذا نطاق المتغير العالمي.
متغيرات غير محلية تستخدم في دوال مرتبطة داخلياً غير معرفة في نطاق المحلية. هذا يعني أن المتغير لا يمكن أن يكون في نطاق المحلية ولا في نطاق العالمي.
دعونا نرى مثالاً على كيفية إنشاء متغيرات عالمية في بيثون.
نستخدم كلمة المفتاح nonlocal لإنشاء متغير غير محلي.
def outer(): x = "local" def inner(): nonlocal x x = "nonlocal" print("inner:", x) inner() print("outer:", x) outer()
عندما نقوم بتشغيل الكود، سيتم إظهار ما يلي:
inner: nonlocal outer: nonlocal
في الكود أعلاه، هناك دالة مرتبطة داخلياً اسمها inner(). نستخدم كلمة المفتاح nonlocal لإنشاء متغير غير محلي. دالة inner() معرفة في نطاق دالة أخرى اسمها external().
ملاحظةإذا قمنا بتغيير قيمة المتغير غير المحلي، فإن هذه التغييرات ستظهر في المتغير المحلي.