-->

آخر الأخبار

جاري التحميل ...

مشاركة مميزة

كورس بايثون من البداية للاحتراف مع تمارين كثيرة وبرامج كثيرة وشرح تفصيلي.

 كورس بايثون من البداية للاحتراف مع تمارين كثيرة وبرامج كثيرة وشرح تفصيلي. خطة بايثون المكثّفة: من الأساس للذكاء الاصطناعي في 20 أسبوعاً   ا...

Local and Global Scopes كيف التعبير عن الـ local والـ global variable في الـ Python؟

-1-
-2-

 Local and Global Scopes  كيف التعبير عن الـ local والـ global variable في الـ Python؟






# Local vs Global Variables في Python


## 1. المتغيرات المحلية (Local Variables)


المتغير **محلي** إذا تم تعريفه **داخل** دالة. لا يمكن الوصول إليه من خارج الدالة.

```python
def my_func():
    x = 10          # x متغير محلي
    print(x)

my_func()           # 10
print(x)            # ❌ NameError: name 'x' is not defined
```

كل استدعاء للدالة ينشئ نسخة جديدة من المتغير المحلي:

```python
def counter():
    n = 0
    n += 1
    print(n)

counter()   # 1
counter()   # 1  ← تبدأ من الصفر كل مرة
```

---

## 2. المتغيرات العامة (Global Variables)


المتغير **عام** إذا تم تعريفه **خارج** جميع الدوال (على مستوى الموديول). يمكن **قراءته** من داخل أي دالة.

```python
x = 100             # متغير عام

def show():
    print(x)        # ✅ يمكن القراءة

show()              # 100
print(x)            # 100
```

---

## 3. الفرق الأساسي: القراءة vs التعديل


### ✅ القراءة من داخل الدالة — تعمل بدون مشاكل
```python
x = 5

def read_x():
    print(x)        # 5

read_x()
```

### ❌ التعديل بدون `global` — ينشئ متغير محلي جديد!
```python
x = 5

def change_x():
    x = 10          # هذا متغير محلي جديد، وليس العام!
    print(x)

change_x()          # 10
print(x)            # 5  ← العام لم يتغير
```

Python يعتبر أي إسناد داخل الدالة تعريفًا لمتغير **محلي**، إلا إذا أخبرته بغير ذلك.

---

## 4. كلمة `global`

تستخدم لتعديل متغير عام من داخل دالة:

```python
x = 5

def change_x():
    global x        # أعلن أن x هنا هو العام
    x = 10

change_x()
print(x)            # 10 ✅
```

⚠️ **تحذير**: لا تستخدم `global` إلا عند الضرورة — فهي تجعل الكود أصعب في التتبع والاختبار.

---

## 5. كلمة `nonlocal` (للدوال المتداخلة)


تستخدم للوصول لمتغير في الدالة **الأم** (وليس العام):

```python
def outer():
    x = 10
    def inner():
        nonlocal x      # يشير إلى x في outer
        x = 20
    inner()
    print(x)            # 20

outer()
```

بدون `nonlocal`، `x = 20` داخل `inner` ستنشئ متغيرًا محليًا جديدًا، ويبقى `x` في `outer` يساوي 10.

---

## 6. قاعدة LEGB


Python يبحث عن الأسماء بهذا الترتيب:

| الحرف | المعنى | المكان |
|-------|--------|--------|
| **L** | Local | داخل الدالة الحالية |
| **E** | Enclosing | الدوال المحيطة (المتداخلة) |
| **G** | Global | مستوى الموديول |
| **B** | Built-in | أسماء Python المدمجة (`len`, `print`...) |

```python
x = 'global'

def outer():
    x = 'enclosing'
    def inner():
        x = 'local'
        print(x)        # local ← أول تطابق
    inner()

outer()
```

---



---

## 8. ملاحظات مهمة

- **أسماء المعاملات (parameters)** محلية دائمًا:
  ```python
  def f(x):     # x محلي
      x = 5
  ```


-3-
-4-

التعليقات



إذا أعجبك محتوى مدونتنا نتمنى البقاء على تواصل دائم ، فقط قم بإدخال بريدك الإلكتروني للإشتراك في بريد المدونة السريع ليصلك جديد المدونة أولاً بأول ، كما يمكنك إرسال رساله بالضغط على الزر المجاور ...

إتصل بنا

جميع الحقوق محفوظة

مدونة كورس 7

2021