Biến đặc biệt __name__ của Python lưu tên của tập lệnh hoặc mô-đun Python hiện đang chạy. Biến Python __name__ đã được thêm vào Python 3. 0 và không có trong Python 2. x. Khi một tập lệnh hoặc mô-đun Python đang được thực thi, biến __name__ được cung cấp giá trị __main__ cho tập lệnh hoặc mô-đun Python hiện tại
_name_ có nghĩa là gì?
Python có một biến tích hợp được gọi là __name__ ghi lại tên của mô-đun hoặc tập lệnh hiện đang chạy. Biến __name__ chỉ giữ tên của mô-đun hoặc tập lệnh trừ khi mô-đun hiện tại đang thực thi, trong trường hợp đó, giá trị __main__ được đặt cho nó
Do đó, nếu một tập lệnh Python được nhập vào một tập lệnh Python khác, thì biến __name__ của nó phải luôn có giá trị __main__ khi tập lệnh Python đó đang chạy. Nếu không, nó sẽ có tên của mô-đun
Thí dụ
Để hiểu rõ hơn về điều này, hãy sử dụng một ví dụ. Tạo một tập lệnh trong Python có tên là thử nghiệm. py và nối thêm đoạn mã sau vào nó
đầu ra
Value of the __name__ : __main__
Giải trình
Giá trị của biến __name__ được đặt thành __main__ khi chúng tôi chạy thử nghiệm. tập lệnh py
Bây giờ chúng ta hãy xây dựng một tập lệnh Python khác có tên là mains. py và nhập cái trước đó vào nó
Thí dụ
đầu ra
Value of the __name__ : testing
Giải trình
Bởi vì chúng ta đã hiển thị giá trị của biến __name__ của mô-đun py đang thử nghiệm, chúng ta có thể thấy từ đầu ra của đoạn mã trên rằng giá trị của biến đang được thử nghiệm
Sử dụng điều kiện if name == main
Chúng tôi sử dụng câu lệnh if và điều kiện __name__ == __main__ để khai báo rằng mã Python nhất định chỉ được thực hiện khi tập lệnh được chạy trực tiếp
Thí dụ
Ở đây, chuỗi __main__ được sử dụng để xác định xem mô-đun hoặc tập lệnh hiện tại có đang thực thi độc lập hay không. Hai dấu gạch dưới ở mỗi bên của tên trong biến __name__ để cho trình thông dịch Python biết rằng đó là từ khóa dành riêng hoặc từ khóa đặc biệt
Ví dụ mã cho tên trong Python
Như đã nói trước đây, khi chúng tôi chạy một tệp mã, giá trị của biến __name__ sẽ thay đổi thành __main__ vì mã được thực thi trực tiếp mà không cần nhập vào tệp khác
Mã số. Đây là ScriptP1. py, một tệp mã
đầu ra
It is a function in the ScriptP1. Called from the ScriptP1.
Bây giờ, hãy tạo một tệp tập lệnh Python mới có tên ScriptP2. py, nhập ScriptP1. py vào đó và cố gắng gọi hàm anything[] được định nghĩa trong ScriptP1
Mã số. Kịch BảnP2. mã py được cung cấp tại đây
đầu ra
ScriptP1 is imported into another file. It is a function in the ScriptP1. Called from the ScriptP2.
Biến __name__ có giá trị ScriptP1 [tên của mô-đun] khi câu lệnh nhập cho ScriptP1 được chạy bên trong ScriptP2, nhưng vì ScriptP2 là tập lệnh đầu tiên được thực thi nên bây giờ nó sẽ có giá trị __main__
In giá trị của __name__
Hãy in ra giá trị của biến __name__ ở mỗi giai đoạn thực thi để các bạn dễ hiểu hơn
Thí dụ. Kịch BảnP1. mã nguồn của tập lệnh py Python được cung cấp bên dưới
đầu ra
Value or the variable __name__ : __main__
ví dụ 2. Và đây là kịch bản ScriptP2. mã nguồn của py
đầu ra
Value or the variable __name__ : __main__
Bản tóm tắt
Phương thức hoặc chức năng chính thường được sử dụng làm điểm mà tại đó bất kỳ chương trình nào được thực thi trong hầu hết các ngôn ngữ lập trình. Tuy nhiên, còn Python thì sao? . Tuy nhiên, một biến __name__ được tạo trước khi thực thi chương trình Python. Trong Python, biến này có thể được sử dụng thay cho phương thức chính
Bạn có thể đã gặp thành ngữ
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
3 của Python khi đọc mã của người khác. Không có gì ngạc nhiên khi nó phổ biến rộng rãi. Bạn thậm chí có thể đã sử dụng $ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
3 trong tập lệnh của riêng mình. Nhưng liệu bạn đã sử dụng đúng cách?Có thể bạn đã từng lập trình bằng ngôn ngữ họ C như Java trước đây và bạn tự hỏi liệu cấu trúc này có phải là một phụ kiện vụng về khi sử dụng hàm
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
5 làm điểm vào hay khôngVề mặt cú pháp, thành ngữ
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
3 của Python chỉ là một khối điều kiện thông thườngValue of the __name__ : testing0
Khối thụt lề bắt đầu từ dòng 2 chứa tất cả mã mà Python sẽ thực thi khi câu lệnh điều kiện ở dòng 1 ước tính thành
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
7. Trong ví dụ mã ở trên, logic mã cụ thể mà bạn đã đặt trong khối điều kiện được biểu thị bằng dấu chấm lửng giữ chỗ [_______68]Vì vậy—nếu không có gì đặc biệt về thành ngữ
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
3, thì tại sao nó lại có vẻ khó hiểu và tại sao nó tiếp tục gây ra cuộc thảo luận trong cộng đồng Python?Nếu thành ngữ vẫn có vẻ hơi khó hiểu và bạn không hoàn toàn chắc chắn về tác dụng của nó, tại sao bạn có thể muốn nó và khi nào nên sử dụng nó, thì bạn đã đến đúng nơi. Trong hướng dẫn này, bạn sẽ tìm hiểu tất cả về thành ngữ
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
3 của Python—bắt đầu với những gì nó thực sự làm trong Python và kết thúc bằng một gợi ý về cách tham khảo nó nhanh hơnMã nguồn. Nhấp vào đây để tải xuống mã nguồn miễn phí mà bạn sẽ sử dụng để hiểu thành ngữ tên-chính
Nói ngắn gọn. Nó cho phép bạn thực thi mã khi tệp chạy dưới dạng tập lệnh, nhưng không phải khi nó được nhập dưới dạng mô-đun
Đối với hầu hết các mục đích thực tế, bạn có thể coi khối điều kiện mà bạn mở bằng
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
3 như một cách để lưu trữ mã chỉ chạy khi tệp của bạn được thực thi dưới dạng tập lệnhBạn sẽ thấy điều đó có nghĩa là gì trong giây lát. Hiện tại, giả sử bạn có tệp sau
Value of the __name__ : testing6
Trong ví dụ này, bạn định nghĩa một hàm,
Value of the __name__ : testing72, mô phỏng tiếng vang trong thế giới thực bằng cách in dần dần các chữ cái cuối cùng của văn bản đầu vào
Dưới đó, từ dòng 10 đến 12, bạn sử dụng thành ngữ
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
3. Mã này bắt đầu bằng câu lệnh điều kiện $ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
3 ở dòng 10. Trong các dòng thụt vào, 11 và 12, sau đó bạn thu thập đầu vào của người dùng và gọi Value of the __name__ : testing72 với đầu vào đó. Hai dòng này sẽ thực thi khi bạn chạy
Value of the __name__ : testing76 dưới dạng tập lệnh từ dòng lệnh của bạn
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
Khi bạn chạy tệp dưới dạng tập lệnh bằng cách chuyển đối tượng tệp tới trình thông dịch Python của mình, biểu thức
Value of the __name__ : testing77 trả về
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
7. Sau đó, khối mã bên dưới Value of the __name__ : testing79 sẽ chạy, vì vậy Python thu thập đầu vào của người dùng và gọi
Value of the __name__ : testing72
Hãy tự mình thử. Bạn có thể tải xuống tất cả các tệp mã mà bạn sẽ sử dụng trong hướng dẫn này từ liên kết bên dưới
Mã nguồn. Nhấp vào đây để tải xuống mã nguồn miễn phí mà bạn sẽ sử dụng để hiểu thành ngữ tên-chính
Đồng thời, nếu bạn nhập
Value of the __name__ : testing72 vào một mô-đun khác hoặc phiên bảng điều khiển, thì mã lồng nhau sẽ không chạy
>>>
Value of the __name__ : testing7
Trong trường hợp này, bạn muốn sử dụng
Value of the __name__ : testing72 trong ngữ cảnh của một tập lệnh hoặc phiên phiên dịch khác, vì vậy bạn sẽ không cần thu thập thông tin đầu vào của người dùng. Chạy
ScriptP1 is imported into another file. It is a function in the ScriptP1. Called from the ScriptP2.03 sẽ gây rối với mã của bạn bằng cách tạo ra tác dụng phụ khi nhập
ScriptP1 is imported into another file. It is a function in the ScriptP1. Called from the ScriptP2.04
Khi bạn lồng mã dành riêng cho việc sử dụng tập lệnh của tệp của bạn dưới thành ngữ
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
3, thì bạn sẽ tránh chạy mã không liên quan đến các mô-đun đã nhậpMã lồng trong
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
3 cho phép bạn phục vụ cho các trường hợp sử dụng khác nhau- Script. Khi chạy dưới dạng tập lệnh, mã của bạn sẽ nhắc người dùng nhập liệu, gọi
Value of the __name__ : testing
72 và in kết quả - mô-đun. Khi bạn nhập
ScriptP1 is imported into another file. It is a function in the ScriptP1. Called from the ScriptP2.
04 làm mô-đun, thìValue of the __name__ : testing
72 được xác định, nhưng không có mã nào thực thi. Bạn cung cấpValue of the __name__ : testing
72 cho phiên mã chính mà không có bất kỳ tác dụng phụ nào
Bằng cách triển khai thành ngữ
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
3 trong mã của bạn, bạn đã thiết lập một điểm nhập bổ sung cho phép bạn sử dụng Value of the __name__ : testing72 ngay từ dòng lệnh
của bạn đi. Bây giờ bạn đã bao gồm các thông tin quan trọng nhất về chủ đề này. Tuy nhiên, vẫn còn nhiều điều cần tìm hiểu và có một số điểm tinh tế có thể giúp bạn hiểu sâu hơn về mã này nói riêng và Python nói chung
Đọc tiếp để tìm hiểu thêm về thành ngữ tên-chính, vì hướng dẫn này sẽ đề cập đến nó một cách ngắn gọn
Loại bỏ các quảng cáoThành ngữ tên-chính hoạt động như thế nào?
Về cốt lõi, thành ngữ này là một câu lệnh có điều kiện kiểm tra xem giá trị của biến
Value or the variable __name__ : __main__03 có bằng chuỗi
Value or the variable __name__ : __main__04 hay không
- Nếu biểu thức
Value of the __name__ : testing
77 là
7, thì mã thụt vào sau câu lệnh điều kiện sẽ thực thi$ python echo.py Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO ooo oo o .
- Nếu biểu thức
Value of the __name__ : testing
77 làValue or the variable __name__ : __main__
08, thì Python sẽ bỏ qua mã thụt lề
Nhưng khi nào thì
Value or the variable __name__ : __main__03 bằng chuỗi
Value or the variable __name__ : __main__04? . Mặc dù điều đó bao gồm hầu hết các trường hợp sử dụng thực tế, nhưng có thể bạn muốn tìm hiểu sâu hơn
Python đặt
Value or the variable __name__ : __main__03 toàn cầu của một mô-đun bằng
Value or the variable __name__ : __main__04 nếu trình thông dịch Python chạy mã của bạn trong môi trường mã cấp cao nhất
“Mã cấp cao nhất” là mô-đun Python do người dùng chỉ định đầu tiên bắt đầu chạy. Đó là "cấp cao nhất" vì nó nhập tất cả các mô-đun khác mà chương trình cần. [Nguồn]
Để hiểu rõ hơn điều đó có nghĩa là gì, bạn sẽ thiết lập một ví dụ thực tế nhỏ. Tạo một tệp Python, gọi nó là
Value or the variable __name__ : __main__03 và thêm một dòng mã
ScriptP1 is imported into another file. It is a function in the ScriptP1. Called from the ScriptP2.0
Tệp mới của bạn chỉ chứa một dòng mã in giá trị và loại của
Value or the variable __name__ : __main__03 toàn cầu vào bảng điều khiển
Khởi động thiết bị đầu cuối của bạn và chạy tệp Python dưới dạng tập lệnh
Value or the variable __name__ : __main__0
Đầu ra cho bạn thấy rằng giá trị của
Value or the variable __name__ : __main__03 là chuỗi Python
Value or the variable __name__ : __main__04 nếu bạn chạy tệp của mình dưới dạng tập lệnh
Ghi chú. Trong môi trường mã cấp cao nhất, giá trị của
Value or the variable __name__ : __main__03 luôn là
Value or the variable __name__ : __main__04. Môi trường mã cấp cao nhất thường là một mô-đun mà bạn chuyển tới trình thông dịch Python dưới dạng đối số tệp, như bạn đã thấy ở trên. Tuy nhiên, có các tùy chọn khác có thể cấu thành môi trường mã cấp cao nhất
- Phạm vi của lời nhắc tương tác
- Gói hoặc mô-đun Python được chuyển tới trình thông dịch Python với tùy chọn
Value or the variable __name__ : __main__
09, viết tắt của mô-đun - Mã Python được trình thông dịch Python đọc từ đầu vào tiêu chuẩn
- Mã Python được chuyển tới trình thông dịch Python với tùy chọn
Value or the variable __name__ : __main__
90, viết tắt của lệnh
Nếu bạn tò mò muốn tìm hiểu thêm về các tùy chọn này, thì hãy xem tài liệu Python về môi trường mã cấp cao nhất là gì. Tài liệu minh họa từng gạch đầu dòng này bằng một đoạn mã ngắn gọn
Bây giờ bạn đã biết giá trị của
Value or the variable __name__ : __main__03 khi mã của bạn được thực thi trong môi trường mã cấp cao nhất
Nhưng một câu điều kiện chỉ có thể tạo ra các kết quả khác nhau khi điều kiện có cơ hội đánh giá theo những cách khác nhau. Vì vậy, khi nào mã của bạn không chạy trong môi trường mã cấp cao nhất và điều gì sẽ xảy ra với giá trị của
Value or the variable __name__ : __main__03 trong trường hợp đó?
Mã trong tệp của bạn không chạy trong môi trường mã cấp cao nhất nếu bạn nhập mô-đun của mình. Trong trường hợp đó, Python đặt
Value or the variable __name__ : __main__03 thành tên của mô-đun
Để dùng thử, hãy khởi động bảng điều khiển Python và nhập mã từ
Value or the variable __name__ : __main__03 dưới dạng mô-đun
>>>
Value or the variable __name__ : __main__0
Python thực thi mã được lưu trữ trong không gian tên chung của
Value or the variable __name__ : __main__03 trong quá trình nhập, có nghĩa là nó sẽ gọi
Value or the variable __name__ : __main__96 và ghi đầu ra vào bảng điều khiển
Tuy nhiên, trong trường hợp này, giá trị của mô-đun
Value or the variable __name__ : __main__03 là khác. Nó trỏ tới
Value or the variable __name__ : __main__98, một chuỗi bằng với tên của mô-đun
Ghi chú. Bạn có thể nhập bất kỳ tệp nào chứa mã Python dưới dạng mô-đun và Python sẽ chạy mã trong tệp của bạn trong quá trình nhập. Tên của mô-đun thường sẽ là tên tệp không có phần mở rộng tệp đối với tệp Python [
Value or the variable __name__ : __main__99]
Bạn vừa biết rằng đối với môi trường mã cấp cao nhất của mình,
Value or the variable __name__ : __main__03 luôn là
Value or the variable __name__ : __main__04, vì vậy hãy tiếp tục và xác nhận điều đó trong phiên phiên dịch của bạn. Đồng thời kiểm tra xem chuỗi
Value or the variable __name__ : __main__98 đến từ đâu
>>>
Value or the variable __name__ : __main__9
Toàn cầu
Value or the variable __name__ : __main__03 có giá trị
Value or the variable __name__ : __main__04 và
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
65 cho mô-đun $ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
66 đã nhập có giá trị Value or the variable __name__ : __main__98, là tên của mô-đun dưới dạng chuỗi
Ghi chú. Hầu hết thời gian, môi trường mã cấp cao nhất sẽ là tập lệnh Python mà bạn thực thi và là nơi bạn nhập các mô-đun khác. Tuy nhiên, trong ví dụ này, bạn có thể thấy rằng môi trường mã cấp cao nhất không bị ràng buộc chặt chẽ với việc chạy tập lệnh và cũng có thể là phiên thông dịch chẳng hạn
Bây giờ bạn biết rằng giá trị của
Value or the variable __name__ : __main__03 sẽ có một trong hai giá trị tùy thuộc vào vị trí của nó
- Trong môi trường mã cấp cao nhất, giá trị của
Value or the variable __name__ : __main__
03 làValue or the variable __name__ : __main__
04 - Trong mô-đun đã nhập, giá trị của
Value or the variable __name__ : __main__
03 là tên của mô-đun dưới dạng chuỗi
Vì Python tuân theo các quy tắc này nên bạn có thể tìm hiểu xem một mô-đun có đang chạy trong môi trường mã cấp cao nhất hay không. Bạn làm điều này bằng cách kiểm tra giá trị của
Value or the variable __name__ : __main__03 với một câu lệnh có điều kiện, câu lệnh này đưa bạn đến vòng tròn đầy đủ của thành ngữ tên-chính
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
6Với việc kiểm tra có điều kiện này, bạn có thể khai báo mã chỉ thực thi khi mô-đun được chạy trong môi trường mã cấp cao nhất
Thêm thành ngữ vào
Value or the variable __name__ : __main__03 như được hiển thị trong khối mã ở trên, sau đó chạy lại tệp dưới dạng tập lệnh
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
6Khi chạy mã của bạn dưới dạng tập lệnh, cả hai lệnh gọi tới
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
64 đều thực thiTiếp theo, bắt đầu phiên phiên dịch mới và nhập lại
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
66 dưới dạng mô-đun>>>
Value or the variable __name__ : __main__0
Khi bạn nhập tệp của mình dưới dạng mô-đun, mã mà bạn đã lồng trong
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
3 không thực thiBây giờ bạn đã biết cách thức hoạt động của thành ngữ name-main trong Python, bạn có thể tự hỏi mình nên sử dụng nó chính xác khi nào và như thế nào trong mã của mình—và khi nào nên tránh sử dụng nó
Loại bỏ các quảng cáoKhi nào bạn nên sử dụng thành ngữ tên-chính trong Python?
Bạn sử dụng thành ngữ này khi bạn muốn tạo một điểm nhập bổ sung cho tập lệnh của mình để tệp của bạn có thể truy cập được dưới dạng tập lệnh độc lập cũng như mô-đun có thể nhập được. Bạn có thể muốn điều đó khi tập lệnh của bạn cần thu thập đầu vào của người dùng
Trong phần đầu tiên của hướng dẫn này, bạn đã sử dụng thành ngữ name-main cùng với
ScriptP1 is imported into another file. It is a function in the ScriptP1. Called from the ScriptP2.03 để thu thập thông tin đầu vào của người dùng khi chạy
Value of the __name__ : testing76 dưới dạng tập lệnh. Đó là một lý do tuyệt vời để sử dụng thành ngữ tên-chính
Ngoài ra còn có các cách khác để thu thập đầu vào của người dùng trực tiếp từ dòng lệnh. Ví dụ: bạn có thể tạo một điểm nhập dòng lệnh cho một tập lệnh Python nhỏ với
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
69 và thành ngữ tên-chínhValue of the __name__ : testing61
Thay vì thu thập thông tin đầu vào của người dùng bằng
ScriptP1 is imported into another file. It is a function in the ScriptP1. Called from the ScriptP2.03, bạn đã thay đổi mã trong
Value of the __name__ : testing76 để người dùng của bạn có thể cung cấp văn bản dưới dạng đối số trực tiếp từ dòng lệnh
Value of the __name__ : testing62
Python thu thập một số từ tùy ý vào
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
69, đây là danh sách các chuỗi đại diện cho tất cả các đầu vào. Mỗi từ được coi là một đối số mới khi một ký tự khoảng trắng ngăn cách nó với các từ khácBằng cách thực thi mã xử lý đầu vào của người dùng và lồng nó vào tên-chính thành ngữ, bạn cung cấp một điểm nhập bổ sung cho tập lệnh của mình
Nếu bạn muốn tạo một điểm vào cho một gói, thì bạn nên tạo một tệp
Value of the __name__ : testing603 dành riêng cho mục đích đó. Tệp này đại diện cho một điểm vào mà Python gọi khi bạn chạy gói của mình bằng tùy chọn
Value or the variable __name__ : __main__09
Value of the __name__ : testing63
Khi bạn tạo một môi trường ảo bằng mô-đun
Value of the __name__ : testing605, như minh họa ở trên, thì bạn chạy mã được xác định trong tệp
Value of the __name__ : testing603. Tùy chọn
Value or the variable __name__ : __main__09 theo sau là tên mô-đun
Value of the __name__ : testing605 gọi
Value of the __name__ : testing603 từ mô-đun
Value of the __name__ : testing605
Bởi vì
Value of the __name__ : testing605 là một gói chứ không phải là một tập lệnh giao diện dòng lệnh [CLI] nhỏ, nên nó có một tệp
Value of the __name__ : testing603 chuyên dụng làm điểm vào
Ghi chú. Có những ưu điểm bổ sung của mã lồng nhau, chẳng hạn như bộ sưu tập đầu vào của người dùng, dưới thành ngữ tên-chính. Vì mã lồng nhau đó không thực thi trong quá trình nhập mô-đun, nên bạn có thể chạy thử nghiệm đơn vị từ một mô-đun thử nghiệm riêng biệt trên các chức năng của mình mà không tạo ra tác dụng phụ
Mặt khác, các tác dụng phụ có thể xảy ra do mô-đun thử nghiệm cần nhập mô-đun của bạn để chạy thử nghiệm đối với mã của bạn
Trong tự nhiên, bạn có thể gặp nhiều lý do khác để sử dụng thành ngữ tên-chính trong mã Python. Tuy nhiên, việc thu thập đầu vào của người dùng, thông qua đầu vào tiêu chuẩn hoặc dòng lệnh, là lý do chính được đề xuất để sử dụng nó
Khi nào bạn nên tránh tên-chính thành ngữ?
Bây giờ bạn đã biết khi nào nên sử dụng thành ngữ tên-chính, đã đến lúc tìm hiểu khi nào sử dụng nó không phải là ý tưởng tốt nhất. Bạn có thể ngạc nhiên khi biết rằng trong nhiều trường hợp, có nhiều lựa chọn tốt hơn là lồng mã của bạn vào bên dưới
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
3 trong PythonĐôi khi, các nhà phát triển sử dụng thành ngữ tên-chính để thêm các lần chạy thử vào tập lệnh kết hợp chức năng mã và kiểm tra trong cùng một tệp
Value of the __name__ : testing64
Với thiết lập này, bạn có thể chạy thử nghiệm đối với mã của mình khi bạn thực thi mã dưới dạng tập lệnh
Value of the __name__ : testing65
Vì bạn đã chạy tệp dưới dạng tập lệnh, nên
Value or the variable __name__ : __main__03 bằng với
Value or the variable __name__ : __main__04, biểu thức điều kiện trả về
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
7 và Python được gọi là Value of the __name__ : testing617. Bộ thử nghiệm nhỏ đã chạy và thử nghiệm của bạn đã thành công
Đồng thời, bạn không tạo bất kỳ thực thi mã không mong muốn nào khi nhập mã của mình dưới dạng mô-đun
>>>
Value of the __name__ : testing66
Vẫn có thể nhập mô-đun và sử dụng chức năng mà bạn đã xác định ở đó. Bài kiểm tra đơn vị sẽ không chạy trừ khi bạn thực thi mô-đun trong môi trường mã cấp cao nhất
Mặc dù điều này hoạt động đối với các tệp nhỏ, nhưng nó thường không được coi là phương pháp hay. Không nên trộn lẫn các bài kiểm tra và mã trong cùng một tệp. Thay vào đó, hãy viết các bài kiểm tra của bạn trong một tệp riêng. Làm theo lời khuyên này thường tạo ra một cơ sở mã có tổ chức hơn. Cách tiếp cận này cũng loại bỏ bất kỳ chi phí nào, chẳng hạn như nhu cầu nhập
Value of the __name__ : testing618 vào tệp tập lệnh chính của bạn
Một lý do khác mà một số lập trình viên sử dụng thành ngữ tên-chính là để bao gồm một minh họa về những gì mã của họ có thể làm.
Value of the __name__ : testing67
Một lần nữa, người dùng của bạn vẫn có thể nhập mô-đun mà không có bất kỳ tác dụng phụ nào. Ngoài ra, khi họ chạy
Value of the __name__ : testing619 dưới dạng tập lệnh, họ sẽ xem qua chức năng của nó
Value of the __name__ : testing68
Bạn có thể tìm thấy cách thực thi mã demo như vậy trong thành ngữ name-main, nhưng có thể cho rằng có nhiều cách tốt hơn để minh họa cách sử dụng chương trình của bạn. Bạn có thể viết các chuỗi tài liệu chi tiết với các lần chạy ví dụ có thể tăng gấp đôi dưới dạng tài liệu và bạn có thể soạn tài liệu phù hợp cho dự án của mình
Hai ví dụ trước đề cập đến hai trường hợp sử dụng dưới mức tối ưu phổ biến của tên-chính thành ngữ. Ngoài ra còn có các tình huống khác khi tốt nhất nên tránh thành ngữ tên-chính trong Python
Một kịch bản thuần túy. Nếu bạn viết một tập lệnh để chạy dưới dạng tập lệnh, thì bạn có thể đặt phần thực thi mã của mình vào không gian tên chung mà không cần lồng nó vào thành ngữ tên-chính. Bạn có thể sử dụng Python làm ngôn ngữ kịch bản vì nó không bắt buộc các mẫu hướng đối tượng mạnh. Bạn không cần phải dính vào các mẫu thiết kế từ các ngôn ngữ khác khi lập trình bằng Python
Một chương trình dòng lệnh phức tạp. Nếu bạn viết một ứng dụng dòng lệnh lớn hơn, thì tốt nhất bạn nên tạo một tệp riêng làm điểm vào của mình. Sau đó, bạn nhập mã từ mô-đun của mình vào đó thay vì xử lý đầu vào của người dùng bằng thành ngữ tên-chính. Đối với các chương trình dòng lệnh phức tạp hơn, bạn cũng sẽ được hưởng lợi từ việc sử dụng mô-đun
Value of the __name__ : testing
620 tích hợp sẵn thay vì
69$ python echo.py Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO ooo oo o .
Có thể bạn đã từng sử dụng thành ngữ tên-chính cho một trong những mục đích dưới mức tối ưu này trước đây. Nếu bạn muốn tìm hiểu thêm về cách viết Python thành ngữ hơn cho từng tình huống này, hãy theo các liên kết được cung cấp
❌ Trường hợp sử dụng dưới mức tối ưu✅ Thay thế tốt hơn Thực thi mã kiểm traTạo mô-đun thử nghiệm chuyên dụngTrình diễn mãXây dựng tài liệu dự án và bao gồm các ví dụ trong chuỗi tài liệu của bạnTạo tập lệnh thuần túyChạy dưới dạng tập lệnhCung cấp điểm nhập chương trình CLI phức tạpTạo mô-đun CLI chuyên dụng
Mặc dù bây giờ bạn đã biết khi nào nên tránh thành ngữ tên chính, nhưng bạn vẫn có thể thắc mắc về cách sử dụng nó tốt nhất trong một tình huống hợp lệ
Loại bỏ các quảng cáoTheo cách nào bạn nên bao gồm tên-chính thành ngữ?
Thành ngữ tên-chính trong Python chỉ là một câu lệnh có điều kiện, vì vậy bạn có thể sử dụng nó ở bất cứ đâu trong tệp của mình—thậm chí nhiều hơn một lần. Tuy nhiên, đối với hầu hết các trường hợp sử dụng, bạn sẽ đặt một thành ngữ tên-chính ở cuối tập lệnh của mình
Value of the __name__ : testing69
Bạn đặt thành ngữ tên chính ở cuối tập lệnh của mình vì điểm nhập cho tập lệnh Python luôn ở đầu tệp. Nếu bạn đặt thành ngữ tên chính ở cuối tệp của mình, thì tất cả các hàm và lớp của bạn sẽ được xác định trước khi Python đánh giá biểu thức điều kiện
Ghi chú. Trong Python, mã trong thân hàm hoặc lớp không chạy trong khi định nghĩa. Mã đó chỉ thực thi khi bạn gọi một hàm hoặc khởi tạo một lớp
Tuy nhiên, mặc dù việc sử dụng nhiều hơn một thành ngữ tên-chính trong một kịch bản là không phổ biến, nhưng trong một số trường hợp, có thể có lý do để làm như vậy. Tài liệu hướng dẫn phong cách Python, PEP8, rõ ràng về nơi đặt tất cả các câu lệnh nhập của bạn
Các mục nhập luôn được đặt ở đầu tệp, ngay sau bất kỳ nhận xét và chuỗi tài liệu nào của mô-đun cũng như trước các hằng số và toàn cầu của mô-đun. [Nguồn]
Đây là lý do tại sao bạn đã nhập
Value of the __name__ : testing622 ở đầu tệp trong
Value of the __name__ : testing76
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
0Tuy nhiên, bạn thậm chí không cần nhập
Value of the __name__ : testing622 khi bạn chỉ muốn nhập
ScriptP1 is imported into another file. It is a function in the ScriptP1. Called from the ScriptP2.04 dưới dạng mô-đun
Để giải quyết vấn đề này mà vẫn tuân thủ các đề xuất về kiểu dáng được xác định trong PEP 8, bạn có thể sử dụng thành ngữ tên-chính thứ hai. Bằng cách lồng phần nhập của
Value of the __name__ : testing622 vào một thành ngữ tên-chính, bạn có thể giữ tất cả các phần nhập ở đầu tệp nhưng tránh nhập
Value of the __name__ : testing622 khi bạn không cần sử dụng nó
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
1Bạn đã lồng việc nhập
Value of the __name__ : testing622 dưới một thành ngữ tên-chính khác. Bằng cách đó, bạn giữ câu lệnh nhập ở đầu tệp của mình, nhưng bạn tránh nhập
Value of the __name__ : testing622 khi bạn sử dụng
ScriptP1 is imported into another file. It is a function in the ScriptP1. Called from the ScriptP2.04 làm mô-đun
Ghi chú. Bạn có thể sẽ không gặp thiết lập này thường xuyên, nhưng đây là ví dụ về thời điểm có thể hữu ích khi sử dụng nhiều thành ngữ tên-chính trong một tệp
Tuy nhiên, khả năng đọc vẫn được tính, vì vậy việc giữ câu lệnh nhập ở đầu mà không có thành ngữ tên-chính thứ hai thường sẽ là lựa chọn tốt hơn. Tuy nhiên, thành ngữ tên-chính thứ hai có thể hữu ích nếu bạn đang làm việc trong môi trường có nguồn lực hạn chế
Như bạn đã học trước đó trong hướng dẫn, có ít cơ hội sử dụng thành ngữ tên-chính hơn bạn tưởng. Đối với hầu hết các trường hợp sử dụng đó, đặt một trong các kiểm tra có điều kiện này ở cuối tập lệnh sẽ là lựa chọn tốt nhất của bạn
Cuối cùng, bạn có thể tự hỏi mã nào nên đi vào khối mã điều kiện. Tài liệu Python cung cấp hướng dẫn rõ ràng về cách sử dụng thành ngữ của tên-chính thành ngữ về vấn đề đó
Đặt càng ít câu lệnh càng tốt vào khối bên dưới
Value of the __name__ : testing631 có thể cải thiện độ rõ ràng và chính xác của mã. [Nguồn]
Giữ mã dưới thành ngữ tên-chính của bạn ở mức tối thiểu. Khi bạn bắt đầu đặt nhiều dòng mã lồng nhau dưới thành ngữ tên-chính, thì thay vào đó, bạn nên xác định một hàm
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
5 và gọi hàm đó$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
2Mẫu thiết kế này mang lại cho bạn lợi thế là mã bên dưới tên-chính thành ngữ rõ ràng và ngắn gọn. Ngoài ra, có thể gọi
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
5 ngay cả khi bạn đã nhập mã của mình dưới dạng một mô-đun, chẳng hạn như để kiểm tra đơn vị các chức năng của nóGhi chú. Định nghĩa
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
5 trong Python có nghĩa khác với các ngôn ngữ khác, chẳng hạn như Java và C. Trong Python, đặt tên hàm này là chính chỉ là một quy ước. Bạn có thể đặt tên bất kỳ cho chức năng này—và như bạn đã thấy trước đây, bạn thậm chí không cần sử dụng nóCác ngôn ngữ hướng đối tượng khác định nghĩa hàm
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
5 làm điểm vào cho chương trình. Trong trường hợp đó, trình thông dịch gọi ngầm một hàm tên là $ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
5, và chương trình của bạn sẽ không hoạt động nếu không có nóTrong phần này, bạn đã học được rằng có lẽ bạn nên viết thành ngữ tên-chính ở cuối tập lệnh của mình
Nếu bạn có nhiều dòng mã mà bạn định lồng vào bên dưới
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
3, thì tốt hơn là bạn nên cấu trúc lại mã đó thành một hàm $ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
5 mà bạn gọi từ khối điều kiện dưới thành ngữ tên-chínhBây giờ bạn đã biết cách sử dụng thành ngữ name-main, bạn có thể thắc mắc tại sao nó trông khó hiểu hơn các mã Python khác mà bạn đã từng sử dụng
Loại bỏ các quảng cáoMã soạn sẵn thành ngữ có nên được đơn giản hóa không?
Nếu bạn đến từ một ngôn ngữ lập trình hướng đối tượng khác, bạn có thể nghĩ rằng thành ngữ tên-chính của Python là một điểm bắt đầu tương tự như các hàm
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
5 trong Java hoặc C, nhưng vụng về hơnMặc dù chắc chắn là hài hước và dễ hiểu, nhưng meme này dễ gây hiểu lầm vì nó ngụ ý rằng thành ngữ tên-chính có thể so sánh với các hàm điểm vào của
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
5 trong các ngôn ngữ khácThành ngữ chính tên Python không đặc biệt. Nó chỉ là một kiểm tra có điều kiện. Thoạt nhìn, nó có vẻ khó hiểu, đặc biệt khi bạn mới bắt đầu làm việc với Python và bạn đã quen với cú pháp gọn gàng và thanh lịch của Python. Xét cho cùng, thành ngữ name-main bao gồm một biến dunder từ không gian tên chung và một chuỗi cũng là một giá trị dunder
Vì vậy, nó không phải là loại điểm vào mà main đại diện trong các ngôn ngữ khác. Nhưng tại sao nó trông giống như vậy?
Nếu bạn duyệt qua kho lưu trữ của danh sách gửi thư ý tưởng Python, PEP bị từ chối và diễn đàn thảo luận Python, thì bạn sẽ tìm thấy một số nỗ lực để thay đổi thành ngữ
Nếu bạn đọc một số cuộc thảo luận này, thì bạn sẽ nhận thấy rằng nhiều Pythonistas dày dạn kinh nghiệm tranh luận rằng thành ngữ này không khó hiểu và không nên thay đổi. Họ đưa ra nhiều lý do
- Nó ngắn. Hầu hết các thay đổi được đề xuất chỉ lưu hai dòng mã
- Nó có một trường hợp sử dụng hạn chế. Bạn chỉ nên sử dụng nó nếu bạn cần chạy một tệp dưới dạng mô-đun cũng như tập lệnh. Bạn không cần phải sử dụng nó thường xuyên
- Nó phơi bày sự phức tạp. Các biến và hàm Dunder là một phần quan trọng của Python khi bạn tìm hiểu sâu hơn một chút. Điều đó có thể làm cho thành ngữ hiện tại trở thành điểm khởi đầu cho người học khơi dậy sự tò mò và cho họ cái nhìn đầu tiên về cú pháp của Python
- Nó duy trì khả năng tương thích ngược. Thành ngữ tên chính đã trở thành một tiêu chuẩn thực tế trong ngôn ngữ trong một thời gian dài, điều đó có nghĩa là việc thay đổi nó sẽ phá vỡ khả năng tương thích ngược
Được rồi, vì vậy bạn đang mắc kẹt với ________ 63 vào lúc này. Có vẻ như sẽ rất hữu ích nếu bạn tìm ra một cách hay để đề cập đến nó một cách nhất quán và chính xác
Mở rộng phần bên dưới để biết một chút ngữ cảnh và một vài gợi ý về cách bạn có thể nói về thành ngữ chính tên mà không cần vặn lưỡi hoặc thắt ngón tay
Bạn có thể gọi nó là gì?Hiển thị/Ẩn
Có thể bạn sẽ thảo luận về việc sử dụng thành ngữ tên-chính vào một thời điểm nào đó trong sự nghiệp Python của mình. Đó là một cách diễn đạt dài để viết và thậm chí còn rườm rà hơn khi nói to, vì vậy bạn cũng có thể tìm một cách hay để nói về nó
Có nhiều cách khác nhau để đề cập đến nó trong cộng đồng Python. Hầu hết các đề cập trực tuyến bao gồm toàn bộ cụm từ
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
3 theo sau là một từ- Quy ước
3 [Nguồn]$ python echo.py Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO ooo oo o .
- Biểu thức
3 [Nguồn]$ python echo.py Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO ooo oo o .
- Thành ngữ
Value of the __name__ : testing
645 [Nguồn] - Thành ngữ
Value of the __name__ : testing
646 [Nguồn] - Thành ngữ
3 [Nguồn]$ python echo.py Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO ooo oo o .
- Khổ thơ thực thi [Nguồn]
Như bạn có thể nhận thấy, không có quy ước nghiêm ngặt nào về cách nói về
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
3, nhưng có lẽ bạn sẽ không làm sai nếu tuân theo sự đồng thuận chung khi gọi nó là thành ngữ $ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
3Nếu bạn muốn thúc đẩy việc tiêu chuẩn hóa một tên ngắn hơn cho thành ngữ, thì hãy bảo bạn bè của bạn gọi nó là thành ngữ chính tên. Đó là những gì chúng tôi sẽ gọi nó tại Real Python. Nếu bạn thấy thuật ngữ này hữu ích thì có thể nó sẽ trở nên phổ biến
Nếu bạn tò mò, hãy tham gia một số cuộc thảo luận được liên kết trong các kênh cộng đồng Python khác nhau để tìm hiểu thêm về lý do tại sao các nhà phát triển tranh luận về việc giữ nguyên thành ngữ tên-chính như hiện tại
Sự kết luận
Bạn đã biết tác dụng của thành ngữ
$ python echo.py
Yell something at a mountain: HELLOOOO ECHOOOOOOOOOO
ooo
oo
o
.
3 trong Python. Nó cho phép bạn viết mã thực thi khi bạn chạy tệp dưới dạng tập lệnh chứ không phải khi bạn nhập tệp dưới dạng mô-đun. Tốt nhất là sử dụng nó khi bạn muốn thu thập thông tin đầu vào của người dùng trong quá trình chạy tập lệnh và tránh tác dụng phụ khi nhập mô-đun của bạn—ví dụ: để kiểm tra đơn vị các chức năng của mô-đunBạn cũng đã biết một số trường hợp sử dụng phổ biến nhưng dưới mức tối ưu và tìm hiểu về các cách tiếp cận tốt hơn và thành ngữ hơn mà bạn có thể thực hiện trong các tình huống đó. Có thể bạn đã chấp nhận thành ngữ tên chính của Python sau khi tìm hiểu thêm về nó, nhưng nếu bạn vẫn không thích nó, thì thật tốt khi biết rằng bạn có thể thay thế cách sử dụng nó trong hầu hết các trường hợp
Khi nào bạn sử dụng thành ngữ tên-chính trong mã Python của mình?
Mã nguồn. Nhấp vào đây để tải xuống mã nguồn miễn phí mà bạn sẽ sử dụng để hiểu thành ngữ tên-chính
Đánh dấu là đã hoàn thành
🐍 Thủ thuật Python 💌
Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python
Gửi cho tôi thủ thuật Python »
Giới thiệu về Martin Breuss
Martin thích tự động hóa, trò đùa ngớ ngẩn và rắn, tất cả đều phù hợp với cộng đồng Python. Anh ấy thích học hỏi và khám phá và cũng sẵn sàng nói về nó. Anh ấy viết và ghi nội dung cho Real Python và CodingNomads
» Thông tin thêm về MartinMỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là
Aldren
Geir Arne
Ian
kate
Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia
Nâng cao kỹ năng Python của bạn »
Bậc thầy Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực
Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng các chuyên gia Pythonistas
Nâng cao kỹ năng Python của bạn »
Bạn nghĩ sao?
Đánh giá bài viết này
Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?
Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi