Có gì trong __name__ (Python)?

Giới thiệu về biến _ _name_ _ và cách sử dụng nó trong Python

Rất có thể bạn đã nhìn thấy __name__biến khi xem qua mã Python. Dưới đây, bạn thấy một đoạn mã mẫu về cách nó có thể trông như thế nào:

if __name__ == '__main__': main()

Trong bài viết này, tôi muốn chỉ cho bạn cách bạn có thể sử dụng biến này để tạo mô-đun trong Python.

Tại sao biến _ _name_ _ được sử dụng?

Các __name__biến (hai dấu gạch trước và sau) là một biến Python đặc biệt. Nó nhận giá trị tùy thuộc vào cách chúng ta thực thi tập lệnh chứa.

Đôi khi bạn viết một tập lệnh với các hàm có thể hữu ích trong các tập lệnh khác. Trong Python, bạn có thể nhập tập lệnh đó dưới dạng mô-đun trong tập lệnh khác.

Nhờ biến đặc biệt này, bạn có thể quyết định xem bạn có muốn chạy tập lệnh hay không. Hoặc bạn muốn nhập các chức năng được xác định trong tập lệnh.

Biến __name__ có thể chứa những giá trị nào?

Khi bạn chạy tập lệnh của mình, __name__biến bằng __main__. Khi bạn nhập tập lệnh chứa, nó sẽ chứa tên của tập lệnh.

Chúng ta hãy xem xét hai trường hợp sử dụng này và mô tả quá trình bằng hai hình ảnh minh họa.

Tình huống 1 - Chạy tập lệnh

Giả sử chúng ta đã viết kịch bảnnameScript.py như sau:

def myFunction(): print 'The value of __name__ is ' + __name__
def main(): myFunction()
if __name__ == '__main__': main()

Nếu bạn chạy nameScript.py, quy trình bên dưới sẽ được tuân theo.

Trước khi tất cả các mã khác được chạy, __name__biến được đặt thành __main__. Sau đó,mainmyFunctioncâu lệnh def được chạy. Bởi vì điều kiện đánh giá là true, hàm chính được gọi. Điều này, đến lượt nó, gọi myFunction. Điều này in ra giá trị của __main__.

Tình huống 2 - Nhập tập lệnh trong một tập lệnh khác

Ví dụ: nếu chúng tôi muốn sử dụng lại myFunction trong một tập lệnh khác importingScript.py, chúng tôi có thể nhập nameScript.pydưới dạng mô-đun.

Mã trong importingScript.pycó thể như sau:

import nameScript as ns
ns.myFunction()

Sau đó, chúng tôi có hai phạm vi: một trong số importingScriptvà phạm vi thứ hai của nameScript. Trong hình minh họa, bạn sẽ thấy nó khác với trường hợp sử dụng đầu tiên như thế nào.

Trong __name__importScript.py biến được đặt thành __main__. Bằng cách nhập nameScript, Python bắt đầu tìm kiếm một tệp bằng cách thêm .pyvào tên mô-đun. Sau đó, nó chạy mã có trong tệp đã nhập.

Nhưng lần này nóđược đặt thành nameScript. Một lần nữa các câu lệnh def cho main và myFunction được chạy. Tuy nhiên, bây giờ điều kiện được đánh giá là false và main không được gọi.

Trong importScript.py chúng tôi gọi là myFunction để xuất ra nameScript. NameScript được biết đến với myFunction khi chức năng đó được định nghĩa.

Nếu bạn in __name__trong importScript, nó sẽ xuất ra __main__. Lý do cho điều này là Python sử dụng giá trị đã biết trong phạm vi importScript.

Phần kết luận

Trong bài viết ngắn này, tôi đã giải thích cách bạn có thể sử dụng __name__biến để viết mô-đun. Bạn cũng có thể tự chạy các mô-đun này. Điều này có thể được thực hiện bằng cách sử dụng các giá trị của các biến này thay đổi như thế nào tùy thuộc vào nơi chúng xảy ra.