Python Statements
Python nonlocal Statement
`
Python nonlocal Statement
nonlocal keyword ব্যবহার করে Python nonlocal Statement তৈরি করা হয় এটি নিকটতম scope এর একটি variable উল্লেখ করতে ব্যবহৃত হয়।
nonlocal keyword টি local বা global ভেরিয়েবলে কাজ করবে না এবং তাই global এবং local একটি ব্যতীত অন্য আরেকটি scope ভেরিয়েবলের উল্লেখ করতে ব্যবহার করা আবশ্যক। nonlocal keyword টি নেস্টেড ফাংশনে ব্যবহৃত হয় প্যারেন্ট ফাংশনে একটি ভেরিয়েবল রেফারেন্স করতে।
১.Python nonlocal Keyword উদাহরণ:
এই উদাহরণে, আমরা nonlocal keyword এর একটি কাজ দেখাব।
def foo():
name = "w3" # Our local variable
def bar():
nonlocal name # Reference name in the upper scope
name = 'w3programmers' # Overwrite this variable
print(name)
# Calling inner function
bar()
# Printing local variable
print(name)
foo()
Output:
w3programmers w3programmers
Web Development, Data Science and Big Data Course with Python, MongoDB, MySQL and Django
nonlocal variable ব্যবহারের সুবিধা:
- এটি upper scope variable এ access করতে সাহায্য করে।
- যেহেতু referenced variable টি reuse হয়, তাই ভেরিয়েবলের memory address টিও পুনরায় ব্যবহার করা হয় এবং তাই এটি মেমরি সংরক্ষণ করে।
nonlocal variable এর অসুবিধা সমূহ:
- nonlocal keyword টি global বা local ভেরিয়েবলের উল্লেখ করতে ব্যবহার করা যাবে না।
- nonlocal keyword শুধুমাত্র nested structures এর মধ্যে ব্যবহার করা যেতে পারে।
উদাহরণ ২: এই উদাহরণে, আমরা global statement কে উল্লেখ করার জন্য একটি Python nonlocal Statement তৈরি করলে কী হয় তা দেখব:
# Declaring a global variable
global_name = 'w3programmers'
def foo():
# Defining inner function
def bar():
# Declaring nonlocal variable
nonlocal global_name # Try to reference global variable
global_name = 'W3ProGrammers'# Try to overwrite it
print(global_name)
# Calling inner function
bar()
foo()
Output:
SyntaxError: no binding for nonlocal 'name' found
উদাহরণ ৩: এই উদাহরণে, আমরা দেখতে পাব যে একই নামের variable সহ একাধিক nested function থাকলে কোন variable কে Python nonlocal Statement বোঝায়।
def foo():
# Local variable of foo()
name = "w3p"
# First inner function
def bar():
name = "W3p"
# Second inner function
def ack():
nonlocal name # Reference to the next upper variable with this name
print(name) # Print the value of the referenced variable
name = 'W3P' # Overwrite the referenced variable
print(name)
ack() # Calling second inner function
bar() # Calling first inner function
print(name) # Printing local variable of bar()
foo()
Output
W3p W3P w3p
Web Development, Data Science and Big Data Course with Python, MongoDB, MySQL and Django
উদাহরণ ১৪.৪: এই উদাহরণে, আমরা একটি reusable counter তৈরি করব (শুধু প্রদর্শনের উদ্দেশ্যে)
# Our counter function
def counter():
c = 0 # Local counter variable
# This function manipulate the
# local c variable, when called
def count():
nonlocal c
c += 1
return c
# Return the count() function to manipulate
# the local c variable on every call
return count
# Assign the result of counter() to
# a variable which we use to count up
my_counter = counter()
for i in range(3):
print(my_counter())
print('End of my_counter')
# Create a new counter
new_counter = counter()
for i in range(3):
print(new_counter())
print('End of new_counter')
Output
1 2 3 End of my_counter 1 2 3 End of new_counter