Skip to content

ವೇರಿಯೇಬಲ್ ಸ್ಕೋಪ್ ಮತ್ತು ಲೈಫ್‌ಟೈಮ್ (Variable Scope and Lifetime)

ಪೈಥಾನ್‌ನಲ್ಲಿ, ಸ್ಕೋಪ್ (Scope) ಎಂದರೆ ಒಂದು ವೇರಿಯೇಬಲ್ ಅನ್ನು ಪ್ರವೇಶಿಸಲು (access) ಸಾಧ್ಯವಿರುವ ಪ್ರೋಗ್ರಾಮ್‌ನ ಪ್ರದೇಶ. ಲೈಫ್‌ಟೈಮ್ (Lifetime) ಎಂದರೆ ಒಂದು ವೇರಿಯೇಬಲ್ ಮೆಮೊರಿಯಲ್ಲಿ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಅವಧಿ.

ಈ ಪರಿಕಲ್ಪನೆಗಳು ವೇರಿಯೇಬಲ್‌ಗಳು ಹೇಗೆ ಕೆಲಸ ಮಾಡುತ್ತವೆ ಮತ್ತು ಅವುಗಳನ್ನು ಎಲ್ಲಿ ಬಳಸಬಹುದು ಎಂಬುದನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು ಬಹಳ ಮುಖ್ಯ.


ಸ್ಕೋಪ್‌ನ ವಿಧಗಳು (Types of Scope)

ಪೈಥಾನ್‌ನಲ್ಲಿ ಮುಖ್ಯವಾಗಿ ಎರಡು ರೀತಿಯ ಸ್ಕೋಪ್‌ಗಳಿವೆ:

1. ಲೋಕಲ್ ಸ್ಕೋಪ್ (Local Scope)

  • ಒಂದು ಫಂಕ್ಷನ್‌ನೊಳಗೆ ಡಿಫೈನ್ ಮಾಡಲಾದ ವೇರಿಯೇಬಲ್‌ಗಳು ಲೋಕಲ್ ಸ್ಕೋಪ್ ಹೊಂದಿರುತ್ತವೆ.
  • ಈ ವೇರಿಯೇಬಲ್‌ಗಳನ್ನು ಕೇವಲ ಆ ಫಂಕ್ಷನ್‌ನೊಳಗೆ ಮಾತ್ರ ಪ್ರವೇಶಿಸಬಹುದು.
  • ಫಂಕ್ಷನ್‌ನ ಚಾಲನೆ ಮುಗಿದ ತಕ್ಷಣ, ಈ ವೇರಿಯೇಬಲ್‌ಗಳು ನಾಶವಾಗುತ್ತವೆ (destroyed).
def my_function():
    x = 10  # x ಒಂದು ಲೋಕಲ್ ವೇರಿಯೇಬಲ್
    print(f"ಫಂಕ್ಷನ್‌ನೊಳಗೆ x: {x}")

my_function()
# print(x)  # NameError: name 'x' is not defined (ಇಲ್ಲಿ x ಲಭ್ಯವಿಲ್ಲ)

2. ಗ್ಲೋಬಲ್ ಸ್ಕೋಪ್ (Global Scope)

  • ಫಂಕ್ಷನ್‌ಗಳ ಹೊರಗೆ, ಅಂದರೆ ಪ್ರೋಗ್ರಾಮ್‌ನ ಮುಖ್ಯ ಭಾಗದಲ್ಲಿ ಡಿಫೈನ್ ಮಾಡಲಾದ ವೇರಿಯೇಬಲ್‌ಗಳು ಗ್ಲೋಬಲ್ ಸ್ಕೋಪ್ ಹೊಂದಿರುತ್ತವೆ.
  • ಈ ವೇರಿಯೇಬಲ್‌ಗಳನ್ನು ಪ್ರೋಗ್ರಾಮ್‌ನ ಯಾವುದೇ ಭಾಗದಲ್ಲಿ (ಎಲ್ಲಾ ಫಂಕ್ಷನ್‌ಗಳ ಒಳಗೆ ಮತ್ತು ಹೊರಗೆ) ಪ್ರವೇಶಿಸಬಹುದು.
  • ಪ್ರೋಗ್ರಾಮ್ ಮುಗಿಯುವವರೆಗೂ ಇವುಗಳ ಲೈಫ್‌ಟೈಮ್ ಇರುತ್ತದೆ.
y = 100  # y ಒಂದು ಗ್ಲೋಬಲ್ ವೇರಿಯೇಬಲ್

def another_function():
    print(f"ಫಂಕ್ಷನ್‌ನೊಳಗೆ y: {y}") # ಗ್ಲೋಬಲ್ ವೇರಿಯೇಬಲ್ ಅನ್ನು ಪ್ರವೇಶಿಸಬಹುದು

another_function()
print(f"ಫಂಕ್ಷನ್‌ನ ಹೊರಗೆ y: {y}")

global ಕೀವರ್ಡ್

ಒಂದು ಫಂಕ್ಷನ್‌ನೊಳಗೆ ಗ್ಲೋಬಲ್ ವೇರಿಯೇಬಲ್‌ನ ಮೌಲ್ಯವನ್ನು ಬದಲಾಯಿಸಲು, ನಾವು global ಕೀವರ್ಡ್ ಅನ್ನು ಬಳಸಬೇಕು. ಇಲ್ಲದಿದ್ದರೆ, ಪೈಥಾನ್ ಆ ಹೆಸರಿನಲ್ಲಿ ಹೊಸ ಲೋಕಲ್ ವೇರಿಯೇಬಲ್ ಅನ್ನು ರಚಿಸುತ್ತದೆ.

count = 0  # ಗ್ಲೋಬಲ್ ವೇರಿಯೇಬಲ್

def increment():
    global count  # ಗ್ಲೋಬಲ್ 'count' ಅನ್ನು ಬಳಸಲು ಸೂಚನೆ
    count += 1
    print(f"ಫಂಕ್ಷನ್‌ನೊಳಗೆ: {count}")

increment()
increment()
print(f"ಫಂಕ್ಷನ್‌ನ ಹೊರಗೆ: {count}") # Output: 2

LEGB ನಿಯಮ (LEGB Rule)

ಪೈಥಾನ್ ಒಂದು ವೇರಿಯೇಬಲ್ ಅನ್ನು ಹುಡುಕುವಾಗ, ಅದು ನಿರ್ದಿಷ್ಟ ಕ್ರಮದಲ್ಲಿ ಸ್ಕೋಪ್‌ಗಳನ್ನು ಪರೀಕ್ಷಿಸುತ್ತದೆ. ಈ ಕ್ರಮವನ್ನು LEGB ನಿಯಮ ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ:

  1. L - Local: ಮೊದಲು, ಪ್ರಸ್ತುತ ಫಂಕ್ಷನ್‌ನ ಲೋಕಲ್ ಸ್ಕೋಪ್‌ನಲ್ಲಿ ಹುಡುಕುತ್ತದೆ.
  2. E - Enclosing: ನಂತರ, ನೆಸ್ಟೆಡ್ ಫಂಕ್ಷನ್‌ಗಳಿದ್ದರೆ, ಹೊರಗಿನ ಫಂಕ್ಷನ್‌ನ (enclosing) ಸ್ಕೋಪ್‌ನಲ್ಲಿ ಹುಡುಕುತ್ತದೆ.
  3. G - Global: ನಂತರ, ಪ್ರೋಗ್ರಾಮ್‌ನ ಗ್ಲೋಬಲ್ ಸ್ಕೋಪ್‌ನಲ್ಲಿ ಹುಡುಕುತ್ತದೆ.
  4. B - Built-in: ಕೊನೆಯದಾಗಿ, ಪೈಥಾನ್‌ನ ಅಂತರ್ನಿರ್ಮಿತ (built-in) ಹೆಸರುಗಳಲ್ಲಿ (print, len, etc.) ಹುಡುಕುತ್ತದೆ.

ಉದಾಹರಣೆ:

pi = 3.14  # Global

def outer_function():
    pi = 3.14159  # Enclosing

    def inner_function():
        # pi = 3.1415926  # Local (ಇದನ್ನು ಅನ್‌ಕಾಮೆಂಟ್ ಮಾಡಿದರೆ, ಈ ಮೌಲ್ಯ ಪ್ರಿಂಟ್ ಆಗುತ್ತದೆ)
        print(pi) # ಮೊದಲು ಲೋಕಲ್, ನಂತರ ಎನ್‌ಕ್ಲೋಸಿಂಗ್ ಸ್ಕೋಪ್‌ನಲ್ಲಿ ಹುಡುಕುತ್ತದೆ

    inner_function()

outer_function() # Output: 3.14159

nonlocal ಕೀವರ್ಡ್

ನೆಸ್ಟೆಡ್ ಫಂಕ್ಷನ್‌ನೊಳಗೆ, ಹೊರಗಿನ (enclosing) ಫಂಕ್ಷನ್‌ನ ವೇರಿಯೇಬಲ್ ಅನ್ನು ಬದಲಾಯಿಸಲು nonlocal ಕೀವರ್ಡ್ ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ.

def outer():
    message = "ಹೊರಗಿನ ಸಂದೇಶ"

    def inner():
        nonlocal message # ಹೊರಗಿನ ಫಂಕ್ಷನ್‌ನ 'message' ವೇರಿಯೇಬಲ್ ಅನ್ನು ಬಳಸಲು ಸೂಚನೆ
        message = "ಒಳಗಿನಿಂದ ಬದಲಾಯಿಸಲಾಗಿದೆ"
        print(f"ಒಳಗೆ: {message}")

    inner()
    print(f"ಹೊರಗೆ: {message}")

outer()
ಔಟ್‌ಪುಟ್:
ಒಳಗೆ: ಒಳಗಿನಿಂದ ಬದಲಾಯಿಸಲಾಗಿದೆ
ಹೊರಗೆ: ಒಳಗಿನಿಂದ ಬದಲಾಯಿಸಲಾಗಿದೆ

ಸ್ಕೋಪ್ ಮತ್ತು ಲೈಫ್‌ಟೈಮ್ ಅನ್ನು ಸರಿಯಾಗಿ ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ದೋಷ-ಮುಕ್ತ ಮತ್ತು ನಿರ್ವಹಿಸಬಲ್ಲ ಕೋಡ್ ಬರೆಯಲು ಅತ್ಯಗತ್ಯ.