যদি আমি একটি ফাংশনে একটি বৈশ্বিক পরিবর্তনশীল তৈরি করি তবে আমি কীভাবে অন্য ফাংশনে সেই পরিবর্তনশীলটি ব্যবহার করতে পারি?
নিম্নলিখিত ফাংশন সহ আমরা একটি গ্লোবাল তৈরি করতে পারি:
def create_global_variable():
global global_variable # must declare it to be a global first
# modifications are thus reflected on the module's global scope
global_variable = 'Foo'
একটি ফাংশন লিখতে আসলে এর কোড চালায় না। সুতরাং আমরা create_global_variable
ফাংশন কল :
>>> create_global_variable()
পরিবর্তন ছাড়াই গ্লোবাল ব্যবহার করা
আপনি কেবল এটি ব্যবহার করতে পারেন, যতক্ষণ আপনি এটি প্রত্যাখ্যান করে যে কোন বস্তুর পরিবর্তনের প্রত্যাশা করবেন না:
উদাহরণ স্বরূপ,
def use_global_variable():
return global_variable + '!!!'
এবং এখন আমরা গ্লোবাল ভেরিয়েবল ব্যবহার করতে পারি:
>>> use_global_variable()
'Foo!!!'
কোনও ফাংশনের অভ্যন্তরীণ থেকে বৈশ্বিক পরিবর্তনশীলের পরিবর্তন of
গ্লোবাল ভেরিয়েবলকে অন্য কোনও অবজেক্টে চিহ্নিত করতে আপনাকে আবার গ্লোবাল কীওয়ার্ডটি ব্যবহার করতে হবে:
def change_global_variable():
global global_variable
global_variable = 'Bar'
মনে রাখবেন যে এই ফাংশনটি লেখার পরে, কোডটি আসলে এটি পরিবর্তন করে এখনও চালানো হয়নি:
>>> use_global_variable()
'Foo!!!'
সুতরাং ফাংশন কল করার পরে:
>>> change_global_variable()
আমরা দেখতে পাচ্ছি যে বিশ্বব্যাপী পরিবর্তনশীল পরিবর্তন করা হয়েছে। global_variable
নাম এখন পয়েন্ট 'Bar'
:
>>> use_global_variable()
'Bar!!!'
দ্রষ্টব্য যে পাইথনের "গ্লোবাল" সত্যিকার অর্থে বৈশ্বিক নয় - এটি কেবলমাত্র মডিউল স্তরে বৈশ্বিক। সুতরাং এটি কেবলমাত্র মডিউলগুলিতে লিখিত ফাংশনগুলিতে উপলভ্য যেখানে এটি বিশ্বব্যাপী। ফাংশনগুলি মডিউলটি লিখেছে যাতে তারা লেখা থাকে, তাই যখন তারা অন্য মডিউলগুলিতে রফতানি করা হয়, তারা এখনও মডিউলটিতে সন্ধান করে যা তারা বৈশ্বিক চলকগুলি সন্ধানের জন্য তৈরি করা হয়েছিল।
একই নামের স্থানীয় ভেরিয়েবল
আপনি যদি একই নামের সাথে একটি স্থানীয় ভেরিয়েবল তৈরি করেন তবে এটি একটি বিশ্বব্যাপী ভেরিয়েবলকে ছাপিয়ে দেবে:
def use_local_with_same_name_as_global():
# bad name for a local variable, though.
global_variable = 'Baz'
return global_variable + '!!!'
>>> use_local_with_same_name_as_global()
'Baz!!!'
তবে সেই স্থানীয় নাম পরিবর্তিত ভেরিয়েবল ব্যবহার করা গ্লোবাল ভেরিয়েবল পরিবর্তন করে না:
>>> use_global_variable()
'Bar!!!'
নোট করুন যে গ্লোবালের মতো একই নামের সাথে স্থানীয় ভেরিয়েবলগুলি ব্যবহার করা এড়ানো উচিত যদি না আপনি কী করছেন তা সুনির্দিষ্টভাবে না জানা এবং এটির করার খুব ভাল কারণ নেই। আমি এখনও এমন কারণের মুখোমুখি হই নি।
আমরা ক্লাসে একই আচরণ পাই
মন্তব্য অনুসরণ অনুসরণ জিজ্ঞাসা:
আমি যদি ক্লাসের ভিতরে কোনও ফাংশনের অভ্যন্তরে গ্লোবাল ভেরিয়েবল তৈরি করতে চাই এবং সেই পরিবর্তনশীলটিকে অন্য শ্রেণীর ভিতরে অন্য ফাংশনের অভ্যন্তরে ব্যবহার করতে চাই তবে কী করব?
এখানে আমি প্রদর্শন করি যে আমরা নিয়মিত ক্রিয়ায় যেমন পদ্ধতিতে করি তেমন ব্যবহার করি:
class Foo:
def foo(self):
global global_variable
global_variable = 'Foo'
class Bar:
def bar(self):
return global_variable + '!!!'
Foo().foo()
এবং এখন:
>>> Bar().bar()
'Foo!!!'
তবে আমি আপনাকে সুপারিশ করব যে আপনি গ্লোবাল ভেরিয়েবলগুলি ব্যবহার না করে ক্লাসের বৈশিষ্ট্যগুলি ব্যবহার করুন, মডিউলটির নেমস্পেসকে বিশৃঙ্খলা এড়াতে। এছাড়াও নোট করুন যে আমরা self
এখানে আর্গুমেন্ট ব্যবহার করি না - এগুলি শ্রেণিবদ্ধ পদ্ধতি হতে পারে (সাধারণ cls
তর্ক থেকে শ্রেণীর বৈশিষ্ট্যটিকে রূপান্তরিত করা যদি সহজ ) বা স্থির পদ্ধতি (না self
বা cls
)।