Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Môi trường script cấp cao nhất trong Python (__main__)


Một đối tượng mô-đun được đặc trưng bởi nhiều thuộc tính. Tên thuộc tính được tiền tố và hậu tố 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 chạy như mã thực thi cấp cao nhất, tức là khi đọc từ đầu vào tiêu chuẩn, một script, hoặc từ dấu nhắc tương tác, thuộc tính __name__ được đặt thành '__main__'.

>>> __name__
'__main__'

Từ bên trong một script, chúng ta cũng thấy giá trị của thuộc tính __name__ được đặt thành '__main__'. Thực thi script 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, giá trị của __name__ được đặt thành __main__ cho mô-đun cấp cao nhất. Tuy nhiên, cho mô-đun được nhập, nó được đặt thành tên file. Chạy script 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 đoạn mã thực thi nhất định. Do đó, nếu chúng ta nhập nó, mã của nó sẽ chạy tự động. Chúng ta có script messages.py với hai hàm. Trong phần thực thi, đầu vào của người dùng được cung cấp làm đố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 khi chạy messages.py, đầu ra hiển thị thông báo thanks như sau.

enter name:Ajit
Thank you Ajit. See you again

Chúng ta có script moduletest.py như sau.

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

Bây giờ nếu chúng ta chạy script moduletest.py, chúng ta sẽ thấy câu lệnh input và gọi welcome() đượ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 script. Nhưng chúng ta muốn nhập hàm từ mô-đun messages nhưng không phải mã thực thi trong nó.

Đây là nơi việc giá trị của thuộc tính __name__ của script cấp cao nhất là __main__ trở nên hữu ích. Thay đổi script messages.py sao cho nó chỉ thực thi câu lệnh input và gọi hàm nếu __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 vừa có thể thực thi vừa có thể nhập. moduletest.py không cần thay đổi. Phần thực thi trong mô-đun messages sẽ không chạy nữa.

enter name: milind
Hi milind. Welcome to TutorialsPoint

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