Computer >> Máy Tính >  >> Lập trình >> Python

Môi trường tập lệnh cấp cao nhất bằng Python (__main__)

Một đối tượng mô-đun được đặc trưng bởi các thuộc tính khác nhau. Tên thuộc tính được đặt trước và sau cố định bằng dấu gạch dưới kép __. Thuộc tính quan trọng nhất của mô-đun là __name__. Khi Python đang chạy dưới dạng mã thực thi cấp cao nhất, tức là khi được đọc từ đầu vào chuẩn, tập lệnh hoặc từ lời nhắc tương tác, thuộc tính __name__ được đặt thành ' __main__ '.

>>> __name__
'__main__'

Cũng từ trong một tập lệnh, chúng tôi thấy một giá trị của thuộc tính __name__ được đặt thành '__main__'. Thực thi tập lệnh sau.

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

Đầu ra

name of module: __main__

Tuy nhiên, đối với một mô-đun được nhập, thuộc tính này được đặt thành tên của tập lệnh Python. Đối với mô-đun hello.py

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

Như đã thấy trước đó, giá trị của __name__ được đặt thành __main__ cho mô-đun cấp cao nhất. Tuy nhiên, đối với mô-đun đã nhập, nó được đặt thành tên của một tệp. Chạy tập lệnh sau (moduletest.py)

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

Đầu ra

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

Một tập lệnh Python chứa hàm cũng có thể có một mã thực thi nhất định. Do đó, nếu chúng tôi nhập nó, mã của nó sẽ được chạy tự động. Chúng tôi có tập lệnh này messages.py với hai chức năng. Trong phần thực thi, đầu vào của người dùng được cung cấp dưới dạng đối số cho hàm thanks ().

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)

Rõ ràng là khi chúng tôi chạy messages.py đầu ra sẽ hiển thị thông báo cảm ơn như bên dưới.

enter name:Ajit
Thank you Ajit. See you again

Chúng tôi có một tập lệnh moduletest.py như bên dưới.

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

Bây giờ, nếu chúng tôi chạy tập lệnh moduletest.py, chúng tôi sẽ thấy rằng câu lệnh đầu vào và lệnh gọi chào mừng () sẽ được thực thi.

c:\python37>python moduletest.py

Đầu ra

enter name:Kishan
Thank you Kishan. See you again
enter name:milind
Hi milind. Welcome to TutorialsPoint

Đây là đầu ra của cả hai tập lệnh. Nhưng muốn nhập chức năng từ mô-đun thông báo nhưng không phải mã thực thi trong đó.

Đây là nơi thực tế rằng giá trị của __name__ thuộc tính của tập lệnh cấp cao nhất là __main__ là hữu ích. Thay đổi tập lệnh messages.py để nó thực thi lệnh gọi hàm và đầu vào chỉ khi __name__ bằng __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)

Sử dụng kỹ thuật trên bất cứ khi nào bạn muốn một mô-đun có thể được thực thi cũng như được nhập. Moduletest.py không yêu cầu bất kỳ thay đổi nào. Một phần thực thi trong mô-đun thông báo sẽ không chạy ngay bây giờ.

enter name: milind
Hi milind. Welcome to TutorialsPoint

Lưu ý rằng điều này không ngăn bạn chạy tập lệnh messages.py một cách độc lập.