কম্পিউটার

পাইথনে শীর্ষ-স্তরের স্ক্রিপ্ট পরিবেশ (__প্রধান__)


একটি মডিউল বস্তু বিভিন্ন বৈশিষ্ট্য দ্বারা চিহ্নিত করা হয়. অ্যাট্রিবিউটের নাম ডবল আন্ডারস্কোর __ দ্বারা প্রিফিক্সড এবং পোস্ট-ফিক্সড। মডিউলের সবচেয়ে গুরুত্বপূর্ণ বৈশিষ্ট্য হল __name__। যখন পাইথন একটি শীর্ষ স্তরের এক্সিকিউটেবল কোড হিসাবে চলছে, যেমন যখন স্ট্যান্ডার্ড ইনপুট, একটি স্ক্রিপ্ট বা একটি ইন্টারেক্টিভ প্রম্পট থেকে পড়া হয় তখন __name__ অ্যাট্রিবিউট '__main__ সেট করা হয় '।

>>> __name__
'__main__'

একটি স্ক্রিপ্টের মধ্যে থেকেও, আমরা দেখতে পাই __name__ বৈশিষ্ট্যের একটি মান '__main__' এ সেট করা আছে। নিম্নলিখিত স্ক্রিপ্ট চালান.

'module docstring'
print ('name of module:',__name__)

আউটপুট

name of module: __main__

যাইহোক, একটি আমদানি করা মডিউলের জন্য এই বৈশিষ্ট্যটি পাইথন স্ক্রিপ্টের নামে সেট করা হয়েছে। hello.py মডিউলের জন্য

>>> import hello
>>> hello.__name__
hello

আগে দেখা গেছে, শীর্ষ-স্তরের মডিউলের জন্য __name__ এর মান __main__ এ সেট করা হয়েছে। যাইহোক, আমদানি করা মডিউলের জন্য এটি একটি ফাইলের নামে সেট করা হয়। নিম্নলিখিত স্ক্রিপ্ট চালান (moduletest.py)

import hello
print ('name of top level module:', __name__)
print ('name of imported module:', hello.__name__)

আউটপুট

name of top level module: __main__
name of imported module: hello

ফাংশন ধারণকারী একটি পাইথন স্ক্রিপ্ট একটি নির্দিষ্ট এক্সিকিউটেবল কোড থাকতে পারে। তাই আমরা যদি এটি আমদানি করি তবে এর কোড স্বয়ংক্রিয়ভাবে চালানো হবে। আমাদের দুটি ফাংশন সহ এই স্ক্রিপ্ট messages.py আছে। এক্সিকিউটেবল অংশে ধন্যবাদ() ফাংশনের যুক্তি হিসেবে ব্যবহারকারীর ইনপুট প্রদান করা হয়।

def welcome(name):
print ("Hi {}. Welcome to TutorialsPoint".format(name))
return
def thanks(name):
print ("Thank you {}. See you again".format(name))
name = input('enter name:')
thanks(name)

স্পষ্টতই আমরা যখন messages.py চালাই আউটপুট নিচের মত একটি ধন্যবাদ বার্তা দেখায়।

enter name:Ajit
Thank you Ajit. See you again

আমাদের নিচের মত একটি moduletest.py স্ক্রিপ্ট আছে।

import messages
print ('name of top level module:', __name__)
print ('name of imported module:', messages.__name__)

এখন আমরা যদি moduletest.py স্ক্রিপ্টটি চালাই, আমরা দেখতে পাব যে ইনপুট স্টেটমেন্ট এবং কল টু welcome() চালানো হবে।

c:\python37>python moduletest.py

আউটপুট

enter name:Kishan
Thank you Kishan. See you again
enter name:milind
Hi milind. Welcome to TutorialsPoint
-এ স্বাগতম

এটি উভয় স্ক্রিপ্টের একটি আউটপুট। কিন্তু মেসেজ মডিউল থেকে ফাংশন ইম্পোর্ট করতে চাই কিন্তু এক্সিকিউটেবল কোড নয়।

এখানেই সত্য যে শীর্ষ-স্তরের স্ক্রিপ্টের __name__attribute-এর মান __main__ দরকারী। messages.py স্ক্রিপ্ট পরিবর্তন করুন যাতে এটি শুধুমাত্র ইনপুট এবং ফাংশন কল স্টেটমেন্ট চালায় যদি __name__ __main__ এর সমান হয়।

"docstring of messages module"
def welcome(name):
print ("Hi {}. Welcome to TutorialsPoint".format(name))
return
def thanks(name):
print ("Thank you {}. See you again".format(name))
if __name__=='__main__':
name = input('enter name')
thanks(name)

উপরের কৌশলটি ব্যবহার করুন যখনই আপনি একটি মডিউল চান যেটি কার্যকর করার পাশাপাশি আমদানি করা যেতে পারে। moduletest.py-এর কোনো পরিবর্তনের প্রয়োজন নেই। বার্তা মডিউলের একটি এক্সিকিউটেবল অংশ এখন চলবে না।

enter name: milind
Hi milind. Welcome to TutorialsPoint
-এ স্বাগতম

মনে রাখবেন যে এটি আপনাকে স্বাধীনভাবে messages.py স্ক্রিপ্ট চালানো থেকে বাধা দেয় না।


  1. পাইথন ভার্চুয়াল পরিবেশ

  2. বাইট-কম্পাইল পাইথন লাইব্রেরি

  3. পাইথনে শীর্ষ-স্তরের স্ক্রিপ্ট পরিবেশ (__প্রধান__)

  4. পাইথন গেটপাস মডিউল