English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل أساسي لتعلم Python

تحكم العملية في Python

الوظائف في Python

أنواع البيانات في Python

عمليات ملفات Python

عناصر وكلات Python

التاريخ والوقت في Python

معرفة متقدمة بـ Python

دليل Python

المتغيرات العالمية، المحلية والغير محلية في Python

در این مقاله، شما خواهید آموخت که پایتون متغیرهای global، محلی، غیرمحلی و در کجا از آنها استفاده می‌شود.

متغیرهای global

در پایتون، متغیرهایی که در خارج از یک تابع یا در محدوده‌ی global تعریف می‌شوند، به عنوان متغیرهای global شناخته می‌شوند. این به این معناست که می‌توان از متغیرهای global در داخل یا خارج از یک تابع دسترسی پیدا کرد.

دعونا نرى مثالاً على كيفية إنشاء متغيرات عالمية في بيثون.

مثال 1: ایجاد یک متغیر 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 پایتون.

متغیر محلی

متغیرهایی که در داخل یک تابع یا محدوده‌ی محلی تعریف می‌شوند، به عنوان متغیرهای محلی شناخته می‌شوند.

مثال 2: دسترسی به متغیر محلی خارج از محدوده

def foo():
 y = "محلی"
foo()
چاپ(y)

عندما نقوم بتشغيل الكود، سيتم إظهار ما يلي:

NameError: نام 'y' تعریف نشده است

خروجی یک خطا نشان می‌دهد، زیرا ما سعی کردیم به یک متغیر محلی y در محدوده‌ی global دسترسی پیدا کنیم، و متغیر محلی فقط در foo() یا محدوده‌ی محلی کار می‌کند.

بیایید به یک مثال از ایجاد متغیر محلی در پایتون نگاه کنیم.

مثال 3: ایجاد متغیر محلی

معمولاً، ما یک متغیر را در داخل یک تابع برای ایجاد متغیر محلی تعریف می‌کنیم.

def foo():
 y = "محلی"
 چاپ(y)
foo()

وقتی که ما کد را اجرا می‌کنیم، آن را چاپ خواهد کرد:

محلی

بیایید ببینیممشکل قبلی، که در آنxیک متغیر全局 است، ما می‌خواهیم در داخل foo() آن را تغییر دهیمx.

متغیرهای全局 و محلی

در اینجا، ما نشان می‌دهیم که چگونه می‌توان در یک کد از متغیرهای全局 و محلی استفاده کرد.

مثال 4: استفاده از متغیرهای全局 و محلی در یک کد

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 را چاپ کردیم، یعنی متغیر محلی.

مثال 5: متغيرات عالمية ومحلية بنفس الاسم

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 لإنشاء متغير غير محلي.

مثال 6: إنشاء متغير غير محلي

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().

ملاحظةإذا قمنا بتغيير قيمة المتغير غير المحلي، فإن هذه التغييرات ستظهر في المتغير المحلي.