Chuỗi gạch dưới Python

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

>>> 10 

10

>>> _ 

10

>>> _ * 3 

30

>>> _ * 20 

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

# ignore when unpacking
x, _, _, y = [1, 2, 3, 4] # x = 1, y = 4
______5
# ignore the index
for _ in range[10]:
do_something[]
# or some specific value
for _, val in list_of_tuple:
do_something[]

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

________số 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

>>> base = Base[]
>>> base.var

'var'

>>> _ 
0

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

>>> _ 
1

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

>>> _ 
2

'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

>>> _ 
3

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

>>> _ 
4

'kiểm tra'

>>> _ 
5

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

>>> _ 
6

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?

>>> _ 
7

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

>>> _ 
8

['_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]

>>> _ 
9

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

>>> _ * 3 
0

'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ọ

>>> _ * 3 
1

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

>>> _ * 3 
2

'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

>>> _ * 3 
3____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ã

_= trong Python là gì?

Python tự động lưu trữ giá trị của biểu thức cuối cùng trong trình thông dịch vào một biến cụ thể có tên là "_. " Bạn cũng có thể gán các giá trị này cho một biến khác nếu muốn.

Sự khác biệt giữa __ và _ trong Python là gì?

Dấu gạch dưới đầu và cuối kép [ __var__ ]. Chỉ ra các phương thức đặc biệt được xác định bởi ngôn ngữ Python. Tránh sơ đồ đặt tên này cho các thuộc tính của riêng bạn. Dấu gạch dưới đơn [ _ ]. Đôi khi được dùng làm tên cho các biến tạm thời hoặc không quan trọng [“không quan tâm”].

__ tên __ trong Python là gì?

Biến __name__ [hai dấu gạch dưới trước và sau] là một biến Python đặc biệt . Nó nhận được giá trị của nó tùy thuộc vào cách chúng tôi 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 chức năng cũng 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.

Các biến Python có thể có _ không?

Chính thức, tên biến trong Python có thể dài bất kỳ và có thể bao gồm chữ hoa và chữ thường [ A-Z , a-z ], chữ số [ 0-9 ] và ký tự gạch dưới [ . .

Chủ Đề