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

__name__ (Một biến đặc biệt) trong Python


Không giống như các ngôn ngữ lập trình khác, python không được thiết kế để bắt đầu thực thi mã từ một hàm chính một cách rõ ràng. Một biến đặc biệt được gọi là __name__ cung cấp chức năng của hàm chính. Vì nó là một biến tích hợp sẵn trong ngôn ngữ python, chúng ta có thể viết một chương trình chỉ để xem giá trị của biến này như bên dưới.

print type(__name__)
print __name__

Chạy đoạn mã trên cho chúng ta kết quả sau -

<type 'str'>
__main__

Như bạn có thể thấy ở trên, giá trị của biến __name__ thuộc kiểu dữ liệu chuỗi và bằng ___main__.

Dưới đây là hai tính năng chính của biến __name__.

1. Khi bạn chạy bất kỳ tập lệnh python độc lập được viết tốt nào không tham chiếu đến bất kỳ tập lệnh nào khác, giá trị của biến __name__ bằng __main__.

Hãy viết một chương trình có tên standalone.py để minh họa tính năng này.

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

Chạy đoạn mã trên cho chúng ta kết quả sau -

The value of __name__ is __main__

Như mong đợi, biến __name__ đánh giá thành __main__ do đó là kết quả đầu ra.

2. Tính năng thứ hai là về việc nhập một tập lệnh python vào một tập lệnh khác. Trong một kịch bản như vậy, dường như có hai phạm vi khác nhau có thể được coi là hàm main (). Phạm vi đầu tiên có thể là biến __main__ của chương trình đang chạy và phạm vi thứ hai là biến __main__ của tập lệnh đã nhập được sử dụng trong chương trình hiện tại.

Vậy biến __main__ nào sẽ được sử dụng

khi bạn chạy một hàm từ tập lệnh đã nhập, biến __name__ sẽ đánh giá thành tên thực của tập lệnh và không bằng __main__.

Nhưng khi bạn tìm ra giá trị của biến tên từ chương trình hiện tại mà không tham chiếu đến tập lệnh đã nhập, nó sẽ đánh giá thành __main__ như mong đợi, vì đó là phạm vi của chương trình ở mức 0.

Chương trình dưới đây minh họa ví dụ này.

Ví dụ

import standalone as sa

print('Running the imported script')
sa.func1()

print('\n')
print('Running the current script')
print 'The value of __name__ is ' + __name__

Đầu ra

Chạy đoạn mã trên cho chúng ta kết quả sau -

Running the imported script
The value of __name__ is standalone

Running the current script
The value of __name__ is __main__

Tính hữu ích của cách tiếp cận này là khi mã if __name__ =="__main__":được sử dụng, trình thông dịch python sẽ kiểm tra xem nó có đang phân tích cú pháp tập lệnh hiện đang được thực thi hay không hay nó đang tạm thời phân tích một tập lệnh bên ngoài khác. Bằng cách này, lập trình viên có khả năng kiểm soát các hành vi của các phần khác nhau của chương trình bằng cách chọn chạy các dòng mã từ tập lệnh bên ngoài cũng như tập lệnh hiện đang được thực thi tùy theo tình huống.