Mô-đun nhập Python có dấu gạch dưới

\[\newcommand{L}[1]{\. #1 \. }\newcommand{VL}[1]{\L{ \vec{#1} }}\newcommand{R}[1]{\operatorname{Re}\,[#1]}\newcommand{I}[1]

Hai biến gạch dưới kép¶

Python thường sử dụng tên biến, hàm và phương thức với hai dấu gạch dưới ở mỗi đầu

Ví dụ, khi Python thiết lập để nhập một mô-đun, nó xác định một biến cho chính nó có tên là

$ # Run Python code with "-c" flag
$ python3 -c "import example_module"
Type of __file__ variable is: 
__file__ is: /Users/brettmz-admin/dev_trees/psych-214-fall-2016/example_module.py
5

Những người có kinh nghiệm về Python thường gọi các biến này là biến "dunder", bởi vì chúng có hai dấu gạch dưới ở mỗi bên

Khi bạn nhìn thấy một biến hoặc hàm hoặc phương thức lộn xộn, thì đó hầu như luôn là một biến hoặc hàm hoặc phương thức mà Python đã định nghĩa hoặc Python đang sử dụng theo một cách đặc biệt

Biến “__file__”¶

Biến

$ # Run Python code with "-c" flag
$ python3 -c "import example_module"
Type of __file__ variable is: 
__file__ is: /Users/brettmz-admin/dev_trees/psych-214-fall-2016/example_module.py
5 chứa đường dẫn đến tệp mà Python hiện đang nhập. Bạn có thể sử dụng biến này bên trong mô-đun để tìm đường dẫn của mô-đun. Ví dụ: giả sử bạn có một mô-đun như thế này

Nội dung của

$ # Run Python code with "-c" flag
$ python3 -c "import example_module"
Type of __file__ variable is: 
__file__ is: /Users/brettmz-admin/dev_trees/psych-214-fall-2016/example_module.py
7

# An example Python module
print["Type of __file__ variable is:", type[__file__]]
print["__file__ is:", __file__]

Nếu bạn chạy mô-đun này dưới dạng tập lệnh, thì

$ # Run Python code with "-c" flag
$ python3 -c "import example_module"
Type of __file__ variable is: 
__file__ is: /Users/brettmz-admin/dev_trees/psych-214-fall-2016/example_module.py
5 được đặt

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py

Nếu bạn

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
0 mô-đun, thì
$ # Run Python code with "-c" flag
$ python3 -c "import example_module"
Type of __file__ variable is: 
__file__ is: /Users/brettmz-admin/dev_trees/psych-214-fall-2016/example_module.py
5 cũng được đặt

$ # Run Python code with "-c" flag
$ python3 -c "import example_module"
Type of __file__ variable is: 
__file__ is: /Users/brettmz-admin/dev_trees/psych-214-fall-2016/example_module.py

Biến “__name__”¶

Khi Python nhập một mô-đun, nó đặt biến

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
2 thành một chuỗi chứa tên của mô-đun mà nó đang nhập

Nội dung của

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
3

# Another example Python module
print["Type of __name__ variable is:", type[__name__]]
print["__name__ is:", __name__]

$ python3 -c "import another_example"
Type of __name__ variable is: 
__name__ is: another_example

Nếu bạn chạy cùng mô-đun dưới dạng tập lệnh, Python sẽ không nhập khi chạy mã và

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
2 chứa chuỗi
$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
5

Dấu gạch dưới [_] không phải là một ký tự đơn giản trong Python. Mặc dù ở hầu hết các ngôn ngữ, nó chỉ được sử dụng để đặt tên cho các hàm và biến trong trường hợp con rắn, nhưng trong Python, nó được sử dụng rộng rãi hơn nhiều. Rất có thể, bạn đã thấy các cấu trúc cho _ trong phạm vi [10] hoặc __init __ [bản thân]

Trong chương này, chúng ta sẽ thảo luận về năm mẫu dấu gạch dưới và quy ước đặt tên, cũng như cách chúng ảnh hưởng đến hành vi của các chương trình Python của bạn

  1. Để lưu trữ giá trị cuối cùng trong REPL [Đọc, Đánh giá, In, Lặp lại]
  2. Để bỏ qua các giá trị không quan trọng
  3. Để gán một giá trị đặc biệt cho một hàm hoặc biến
  4. Là bí danh cho các chức năng quốc tế hóa và bản địa hóa
  5. Tách số thành chữ số

Và bây giờ hãy xem xét từng mục danh sách chi tiết hơn

Dấu gạch dưới trong Python REPL

Trình thông dịch ở chế độ tương tác lưu trữ giá trị được tính cuối cùng trong một biến đặc biệt _. Tính năng này xuất hiện lần đầu trong CPython, nhưng hiện đã được hỗ trợ bởi tất cả các trình thông dịch chính

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
0

10

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
1

10

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
2

30

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
3

600

Biến gạch dưới Python

Dấu gạch dưới cũng được sử dụng để bỏ qua các giá trị. Nếu bạn không muốn sử dụng một số giá trị - hãy gán giá trị đó cho biến _

Trong ví dụ mã sau, chúng tôi giải nén số từ bộ trong các biến riêng biệt

Nhưng ví dụ, chúng tôi chỉ quan tâm đến các giá trị đầu tiên và cuối cùng. Tuy nhiên, để biểu thức giải nén thành công, tôi cần gán tất cả các giá trị có trong bộ cho các biến

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
4
$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
5____16
$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
7

Dấu gạch dưới thường được sử dụng nhất trong việc đặt tên. PEP8 mô tả 4 trường hợp sử dụng dấu gạch dưới trong tên

Dấu gạch dưới hàng đầu đơn. “_var”

Khi nói đến tên biến và phương thức, tiền tố gạch dưới đơn chỉ có nghĩa theo quy ước. Đó là một gợi ý cho lập trình viên — nó có nghĩa là những gì cộng đồng Python đồng ý, nhưng nó không ảnh hưởng đến hành vi của các chương trình của bạn

Tiền tố gạch dưới có nghĩa là một gợi ý để nói với một lập trình viên khác rằng một biến hoặc phương thức bắt đầu bằng một dấu gạch dưới duy nhất được dùng cho mục đích sử dụng nội bộ. Quy ước này được định nghĩa trong PEP 8, hướng dẫn kiểu mã Python được sử dụng phổ biến nhất

Hãy xem ví dụ sau

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
8

Điều gì sẽ xảy ra nếu bạn khởi tạo lớp Cơ sở và thử truy cập các thuộc tính var, _var được định nghĩa trong hàm tạo __init__ của nó?

Hãy cùng tìm hiểu

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
9

'var'

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
10

'var với dấu gạch dưới hàng đầu'

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
11

'phương pháp được gọi là'

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
12

'phương thức có dấu gạch dưới đứng đầu được gọi là'

Như bạn có thể thấy, dấu gạch dưới đơn hàng đầu trong các thuộc tính _var và _method không ngăn chúng ta “tiếp cận” lớp và truy cập giá trị của biến đó

Tuy nhiên, dấu gạch dưới hàng đầu ảnh hưởng đến cách tên được nhập từ mô-đun. Tất cả các tên bắt đầu bằng dấu gạch dưới sẽ bị bỏ qua khi nhập mô-đun *

Hãy tạo một tệp [mô-đun] my_string_formatter. py với đoạn mã sau

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
13

Bây giờ, hãy hình dung điều gì sẽ xảy ra nếu chúng ta gọi các hàm bằng cách nhập ký tự đại diện

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
14

'kiểm tra'

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
15

TênLỗi. "tên '_to_upper' không được xác định"

Python không nhập tên có dấu gạch dưới ở đầu [trừ khi mô-đun xác định danh sách __all__ ghi đè hành vi này bằng cách thêm __all__ = ['to_lower', '_to_upper']]

Nhân tiện, nên tránh nhập ký tự đại diện vì chúng làm cho không rõ tên nào có trong không gian tên

Dấu gạch dưới đơn. “var_”

Những tên như vậy được sử dụng để tránh xung đột với các từ khóa trong Python theo quy ước. Bạn thường không nên sử dụng chúng. Quy ước này được định nghĩa và giải thích trong PEP 8

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
16

Dấu gạch dưới kép của Python

Các mẫu đặt tên mà chúng tôi đã đề cập cho đến nay chỉ nhận được ý nghĩa của chúng từ các quy ước đã được thống nhất. Với các thuộc tính lớp Python [biến và phương thức] bắt đầu bằng dấu gạch dưới kép, mọi thứ sẽ khác một chút

Mangling tên Python

Tiền tố gạch dưới kép khiến trình thông dịch Python viết lại tên thuộc tính để tránh xung đột đặt tên trong các lớp con

Làm thế nào nó hoạt động?

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
17

Chúng ta hãy xem các thuộc tính đối tượng với hàm dir[] tích hợp

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
18

['_Test__num3', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '

Ở đây chúng tôi đang nhận danh sách các thuộc tính đối tượng. Ở cuối danh sách, chúng tôi có thể nhận thấy các thuộc tính _num2 và num1 của chúng tôi

bản thân. biến num1 xuất hiện nguyên vẹn dưới dạng num1 trong danh sách thuộc tính

bản thân. _num2 hoạt động theo cùng một cách - nó hiển thị là _num2. Như chúng tôi đã nói trước đây, gạch dưới hàng đầu chỉ là một quy ước

Vậy điều gì đã xảy ra với __num3?

Nếu để ý kỹ, bạn sẽ thấy thuộc tính _Test__num3 ở đầu danh sách. Đây là tên xáo trộn mà trình thông dịch Python áp dụng. Nó hoạt động theo cách đó để bảo vệ biến không bị ghi đè trong các lớp con

Xáo trộn tên cũng áp dụng cho tên phương thức [và thành thật mà nói, cho tất cả các tên bắt đầu bằng dấu gạch dưới kép ở đầu trong ngữ cảnh lớp]

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
19

Lỗi thuộc tính. "Đối tượng NameManglingMethod không có thuộc tính '__method'"

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
20

'phương pháp trộn tên'

Dấu gạch dưới ở đầu và ở cuối kép. "__var__"

Hàm Python bắt đầu bằng dấu gạch dưới

Cái gọi là phương pháp đặc biệt [ma thuật]. Ví dụ: __init__, __len__. Một số trong số chúng thực hiện các tính năng cú pháp, một số lưu trữ dữ liệu đặc biệt. __file__ chỉ đường dẫn của file code, __eq__ được thực thi khi gọi biểu thức a == b

Tất nhiên, người dùng có thể tạo các phương thức của riêng họ

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
21

Các biến Python có dấu gạch dưới ở đầu và ở cuối

Các biến được bao quanh bởi một tiền tố gạch dưới kép và hậu tố không bị ảnh hưởng bởi trình thông dịch Python

hạng A

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
22

'var'

Tuy nhiên, những tên có cả hai dấu gạch dưới ở đầu và ở cuối được dành riêng cho mục đích sử dụng đặc biệt trong ngôn ngữ. Quy tắc này bao gồm những thứ như __init__ cho hàm tạo đối tượng hoặc __call__ để làm cho đối tượng có thể gọi được, v.v.

Quốc tế hóa và bản địa hóa Python Underscore

Đây chỉ là sự thỏa thuận về tên của các chức năng này, chúng không ảnh hưởng đến cú pháp. Truyền thống này đến từ C và mô-đun gettext tích hợp được sử dụng để bản địa hóa. Nó được sử dụng giống như trong Django, khung web phổ biến nhất

# tài liệu chính thức - https. // tài liệu. con trăn. org/3/library/gettext. html

$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
23
$ python3 example_module.py
Type of __file__ variable is: 
__file__ is: example_module.py
24

Dấu gạch dưới Python để chia số thành chữ số

Tính năng này khá mới, nó chỉ được thêm vào Python 3. 6. Bây giờ bạn có thể sử dụng dấu gạch dưới để phân tách các số, giúp cải thiện tổng quan về mã

Các mô-đun Python có thể có dấu gạch dưới không?

Có thể sử dụng dấu gạch dưới trong tên mô-đun nếu nó cải thiện khả năng đọc . Các gói Python cũng phải có tên ngắn, viết thường, mặc dù việc sử dụng dấu gạch dưới không được khuyến khích.

__ Nhập__ trong Python là gì?

Người ta có thể sử dụng hàm __import__[] có sẵn của Python. Việc nhập các mô-đun trong thời gian chạy cũng giúp . cú pháp. __import__[tên, toàn cầu, địa phương, danh sách từ, cấp độ] Tham số. Tên. Tên của mô-đun được nhập.

__ nhập __ trả lại cái gì?

Kết luận. Mô-đun __import__[] trong python giúp lấy mã có trong mô-đun khác bằng cách nhập hàm hoặc mã hoặc tệp bằng cách sử dụng phương thức nhập trong python. Quá trình nhập trong python trả về đối tượng hoặc mô-đun mà chúng tôi đã chỉ định khi sử dụng mô-đun nhập .

Tại sao Python sử dụng dấu gạch dưới?

Đó là một gợi ý cho lập trình viên —và nó có nghĩa là những gì cộng đồng Python đồng ý, nhưng nó không ảnh hưởng đến hành vi của các chương trình của bạn. Tiền tố gạch dưới có nghĩa là một gợi ý cho một lập trình viên khác rằng một biến hoặc phương thức bắt đầu bằng một dấu gạch dưới duy nhất được dùng cho mục đích sử dụng nội bộ.

Chủ Đề