Nếu bạn chưa quen với Python, bạn có thể nhận thấy rằng có thể chạy tập lệnh Python có hoặc không có phương thức chính. Và ký hiệu được sử dụng trong Python để xác định một [i. e. if __name__ == ‘__main__'
] chắc chắn không dễ hiểu, đặc biệt đối với những người mới đến
Trong hướng dẫn hôm nay, chúng ta sẽ khám phá và thảo luận về mục đích của một phương thức chính và điều gì sẽ xảy ra khi bạn định nghĩa một phương thức này trong các ứng dụng Python của mình
Mục đích của __name__
là gì?
Trước khi thực hiện một chương trình, trình thông dịch Python gán tên của mô-đun python thành một biến đặc biệt có tên là __name__
. Tùy thuộc vào việc bạn đang thực thi chương trình thông qua dòng lệnh hay nhập mô-đun vào mô-đun khác, việc gán cho __name__
sẽ khác nhau
Ví dụ: nếu bạn gọi mô-đun của mình dưới dạng tập lệnh
python my_module.py
sau đó Trình thông dịch Python sẽ tự động gán chuỗi_______1_______1 cho biến đặc biệt __name__
. Mặt khác, nếu mô-đun của bạn được nhập vào một mô-đun khác
# Assume that this is another_module.py
import my_module
thì chuỗi
# Assume that this is another_module.py
import my_module
3 sẽ được gán cho __name__
Phương pháp chính hoạt động như thế nào?
Bây giờ, giả sử rằng chúng ta có mô-đun sau, chứa các dòng mã sau
# first_module.py
print['Hello from first_module.py']
if __name__ == '__main__':
print['Hello from main method of first_module.py']
Vì vậy, trong mô-đun ở trên, chúng ta có một câu lệnh in nằm ngoài phương thức chính và một câu lệnh in nữa nằm bên trong. Mã trong phương thức chính, sẽ chỉ được thực thi nếu mô-đun được gọi dưới dạng tập lệnh từ [e. g. ] dòng lệnh, như hình bên dưới
python first_module.py
Hello from first_module.py
Hello from main method of first_module.py
Bây giờ, giả sử rằng thay vì gọi mô-đun
# Assume that this is another_module.py
import my_module
5 dưới dạng tập lệnh, chúng tôi muốn nhập mô-đun đó vào một mô-đun khác# second_module.py
import first_module
print['Hello from second_module.py']
if __name__ == '__main__':
print['Hello from main method of second_module.py']
Và cuối cùng, chúng tôi gọi
# Assume that this is another_module.py
import my_module
6 như một kịch bảnpython second_module.py
Hello from first_module.py
Hello from second_module.py
Hello from main method of second_module.py
Lưu ý rằng đầu ra đầu tiên đến từ mô-đun
# Assume that this is another_module.py
import my_module
5 và cụ thể là từ câu lệnh in nằm ngoài phương thức chính. Vì chúng tôi chưa gọi # Assume that this is another_module.py
import my_module
5 dưới dạng tập lệnh mà thay vào đó chúng tôi đã nhập nó vào # Assume that this is another_module.py
import my_module
6 nên phương thức chính trong first_module sẽ bị bỏ qua đơn giản vì if __name__ == ‘__main__'
ước tính thành # first_module.py
print['Hello from first_module.py']
if __name__ == '__main__':
print['Hello from main method of first_module.py']
1. Nhớ lại rằng từ lời gọi trên, biến __name__
cho # Assume that this is another_module.py
import my_module
6 đã được gán chuỗi # Assume that this is another_module.py
import my_module
1 trong khi biến __name__
của # Assume that this is another_module.py
import my_module
5 đã được gán tên của mô-đun, i. e. # first_module.py
print['Hello from first_module.py']
if __name__ == '__main__':
print['Hello from main method of first_module.py']
7Mặc dù mọi thứ trong if __name__ == ‘__main__'
được coi là cái mà chúng tôi gọi là "phương thức chính", nhưng tốt hơn hết là xác định một phương thức chính phù hợp thay vào đó, phương thức này được gọi nếu điều kiện đánh giá là Đúng. Ví dụ,
# my_module.py
def main[]:
"""The main function of my Python Application"""
print['Hello World']
if __name__ == '__main__':
main[]
Ghi chú. Tôi thường không khuyến khích bạn có nhiều chức năng chính trong một ứng dụng Python. Tôi đã sử dụng hai phương pháp chính khác nhau chỉ vì ví dụ
Suy nghĩ cuối cùng
Trong bài viết này, tôi đã mô tả cách phương thức chính được thực thi trong Python và trong những điều kiện nào. Khi một mô-đun được gọi dưới dạng một chuỗi, thì trình thông dịch Python sẽ gán chuỗi
# Assume that this is another_module.py
import my_module
1 cho một biến đặc biệt có tên là __name__
và mã được xác định theo điều kiện if __name__ == ‘__main__'
sau đó sẽ được thực thi. Mặt khác, khi một mô-đun được nhập trong một mô-đun khác, thì trình thông dịch Python sẽ gán chuỗi có tên của mô-đun đó cho biến đặc biệt __name__
. Điều này có nghĩa là trong những trường hợp như vậy, if __name__ == ‘__main__'
sẽ ước tính thành # first_module.py
print['Hello from first_module.py']
if __name__ == '__main__':
print['Hello from main method of first_module.py']
1, điều đó có nghĩa là chỉ mã bên ngoài điều kiện này mới được thực thi sau khi nhậpTrở thành thành viên và đọc mọi câu chuyện trên Medium. Phí thành viên của bạn hỗ trợ trực tiếp cho tôi và các nhà văn khác mà bạn đọc. Bạn cũng sẽ có toàn quyền truy cập vào mọi câu chuyện trên Phương tiện