HomeLập trìnhPythonPython if __name__...

Python if __name__ == __main__ Được giải thích bằng các ví dụ về mã


Khi trình thông dịch Python đọc một tệp Python, trước tiên, nó sẽ đặt một số biến đặc biệt. Sau đó, nó thực thi mã từ tệp.

Một trong những biến đó được gọi là __name__.

Nếu bạn làm theo từng bước bài viết này và đọc các đoạn mã của nó, bạn sẽ học cách sử dụng if __name__ == "__main__"và tại sao nó rất quan trọng.

Giải thích các mô-đun Python

Các tệp Python được gọi là các mô-đun và chúng được xác định bởi .py phần mở rộng tập tin. Một mô-đun có thể định nghĩa các hàm, lớp và biến.

Vì vậy, khi trình thông dịch chạy một mô-đun, __name__ biến sẽ được đặt thành __main__ nếu mô-đun đang được chạy là chương trình chính.

Nhưng nếu mã đang nhập mô-đun từ một mô-đun khác, thì __name__ biến sẽ được đặt thành tên của mô-đun đó.

Hãy xem một ví dụ. Tạo một mô-đun Python có tên file_one.py và dán mã cấp cao nhất này vào bên trong:

# Python file one module

print("File one __name__ is set to: {}" .format(__name__))
file_one.py

Bằng cách chạy tệp này, bạn sẽ thấy chính xác những gì chúng ta đang nói đến. biến __name__ cho mô-đun này được đặt thành __main__:

File one __name__ is set to: __main__

Bây giờ thêm một tệp khác có tên file_two.py và dán mã này vào bên trong:

# Python module to import

print("File two __name__ is set to: {}" .format(__name__))
file_two.py

Ngoài ra, sửa đổi mã trong file_one.py như thế này vì vậy chúng tôi nhập khẩu file_two mô-đun:

Đọc thêm  Chuỗi Python thành mảng – Cách chuyển đổi văn bản thành danh sách
# Python module to execute
import file_two

print("File one __name__ is set to: {}" .format(__name__))
file_one.py

chạy của chúng tôi file_one mã một lần nữa sẽ cho thấy rằng __name__ biến trong file_one không thay đổi và vẫn được đặt thành __main__. Nhưng bây giờ biến __name__ Trong file_two được đặt làm tên mô-đun của nó, do đó file_two.

Kết quả sẽ giống như thế này:

File two __name__ is set to: file_two
File one __name__ is set to: __main__

Nhưng chạy file_two trực tiếp và bạn sẽ thấy rằng tên của nó được đặt thành __main__:

File two __name__ is set to: __main__

biến __name__ đối với tệp/mô-đun đang chạy sẽ luôn __main__. Nhưng __name__ biến cho tất cả các mô-đun khác đang được nhập sẽ được đặt thành tên mô-đun của chúng.

Quy ước đặt tên tệp Python

Cách sử dụng thông thường __name____main__ trông như thế này:

if __name__ == "__main__":
   Do something here

Hãy xem cách điều này hoạt động trong cuộc sống thực và cách thực sự sử dụng các biến này.

Biến đổi file_onefile_two để trông như thế này:

file_one:

# Python module to execute
import file_two

print("File one __name__ is set to: {}" .format(__name__))

if __name__ == "__main__":
   print("File one executed when ran directly")
else:
   print("File one executed when imported")
file_one.py

file_two:

# Python module to import

print("File two __name__ is set to: {}" .format(__name__))

if __name__ == "__main__":
   print("File two executed when ran directly")
else:
   print("File two executed when imported")
file_two.py

Một lần nữa, khi chạy file_one bạn sẽ thấy rằng chương trình đã nhận ra mô-đun nào trong số hai mô-đun này __main__ và thực thi mã theo đầu tiên của chúng tôi if else các câu lệnh.

Đọc thêm  Cách sử dụng *args và **kwargs trong Python

Kết quả sẽ giống như thế này:

File two __name__ is set to: file_two
File two executed when imported
File one __name__ is set to: __main__
File one executed when ran directly

Bây giờ chạy file_two và bạn sẽ thấy rằng __name__ biến được đặt thành __main__:

File two __name__ is set to: __main__
File two executed when ran directly

Khi các mô-đun như thế này được nhập và chạy, các chức năng của chúng sẽ được nhập và mã cấp cao nhất sẽ được thực thi.

Để xem quy trình này đang hoạt động, hãy sửa đổi các tệp của bạn thành như sau:

file_one:

# Python module to execute
import file_two

print("File one __name__ is set to: {}" .format(__name__))

def function_one():
   print("Function one is executed")

def function_two():
   print("Function two is executed")

if __name__ == "__main__":
   print("File one executed when ran directly")
else:
   print("File one executed when imported")
file_one.py

file_two:

# Python module to import

print("File two __name__ is set to: {}" .format(__name__))

def function_three():
   print("Function three is executed")

if __name__ == "__main__":
   print("File two executed when ran directly")
else:
   print("File two executed when imported")

Bây giờ các chức năng được tải nhưng không chạy.

Để chạy một trong các chức năng này, hãy sửa đổi if __name__ == "__main__" một phần của file_one để trông như thế này:

if __name__ == "__main__":
   print("File one executed when ran directly")
   function_two()
else:
   print("File one executed when imported")

Khi chạy file_one bạn sẽ thấy nên như thế này:

File two __name__ is set to: file_two
File two executed when imported
File one __name__ is set to: __main__
File one executed when ran directly
Function two is executed

Ngoài ra, bạn có thể chạy các chức năng từ các tệp đã nhập. Để làm điều đó, hãy sửa đổi if __name__ == “__main__” một phần của file_one để trông như thế này:

if __name__ == "__main__":
   print("File one executed when ran directly")
   function_two()
   file_two.function_three()
else:
   print("File one executed when imported")

Và bạn có thể mong đợi một kết quả như thế này:

File two __name__ is set to: file_two
File two executed when imported
File one __name__ is set to: __main__
File one executed when ran directly
Function two is executed
Function three is executed

Bây giờ hãy nói file_two mô-đun thực sự lớn với nhiều chức năng (hai trong trường hợp của chúng tôi) và bạn không muốn nhập tất cả chúng. Biến đổi file_two để trông như thế này:

Đọc thêm  Python .sort() – Cách sắp xếp danh sách trong Python
# Python module to import

print("File two __name__ is set to: {}" .format(__name__))

def function_three():
   print("Function three is executed")

def function_four():
   print("Function four is executed")

if __name__ == "__main__":
   print("File two executed when ran directly")
else:
   print("File two executed when imported")
file_two.py

Và để nhập các chức năng cụ thể từ mô-đun, hãy sử dụng from khối nhập khẩu trong file_one tập tin:

# Python module to execute
from file_two import function_three

print("File one __name__ is set to: {}" .format(__name__))

def function_one():
   print("Function one is executed")

def function_two():
   print("Function two is executed")

if __name__ == "__main__":
   print("File one executed when ran directly")
   function_two()
   function_three()
else:
   print("File one executed when imported")
file_one.py

Phần kết luận

Có một trường hợp sử dụng thực sự tốt đẹp cho __name__ biến, cho dù bạn muốn một tệp có thể được chạy dưới dạng chương trình chính hay được nhập bởi các mô-đun khác. Chúng ta có thể sử dụng một if __name__ == "__main__" khối để cho phép hoặc ngăn các phần mã chạy khi các mô-đun được nhập.

Khi trình thông dịch Python đọc một tệp, __name__ biến được đặt là __main__ nếu mô-đun đang được chạy hoặc dưới dạng tên của mô-đun nếu nó được nhập. Việc đọc tệp sẽ thực thi tất cả mã cấp cao nhất, nhưng không phải các hàm và lớp (vì chúng sẽ chỉ được nhập).

áo ngực! (Điều đó có nghĩa là “Làm tốt lắm” trong tiếng Thụy Điển!)

Xem thêm các bài viết như thế này trên hồ sơ freeCodeCamp, hồ sơ Trung bình của tôi và những nội dung thú vị khác mà tôi xây dựng trên trang GitHub của mình.



Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status