Hướng dẫn what is __ in python called? - __ trong python được gọi là gì?

Tôi không phải là người bản ngữ. Xin lỗi vì tiếng Anh của tôi. Làm ơn hãy hiểu.

Các dấu gạch dưới (_) là đặc biệt trong Python.

Mặc dù dấu gạch dưới (_) được sử dụng cho các biến và hàm vỏ rắn trong hầu hết các ngôn ngữ (tất nhiên, không phải cho tất cả), nhưng nó có ý nghĩa đặc biệt trong Python. Nếu bạn là lập trình viên Python, ________ 4 & nbsp ;, __init__(self) như cú pháp có thể quen thuộc.

Bài đăng này sẽ giải thích về thời điểm và cách sử dụng dấu gạch dưới (_) và giúp bạn hiểu nó.

Có 5 trường hợp để sử dụng dấu gạch dưới trong Python.

  1. Để lưu trữ giá trị của biểu thức cuối cùng trong phiên dịch.
  2. Để bỏ qua các giá trị cụ thể. (cái gọi là "tôi không quan tâm")
  3. Để đưa ra ý nghĩa và chức năng đặc biệt cho tên của vartiable hoặc chức năng.
  4. Để sử dụng làm chức năng quốc tế hóa (I18N) hoặc ‘nội địa hóa (L10N).
  5. Để tách các chữ số của giá trị theo nghĩa đen.

Hãy cùng nhìn vào từng trường hợp.

Khi được sử dụng trong phiên dịch viên

Trình thông dịch Python lưu trữ giá trị biểu thức cuối cùng cho biến đặc biệt có tên là ‘_. Tính năng này đã được sử dụng trong phiên dịch Cpython tiêu chuẩn trước và bạn cũng có thể sử dụng nó trong các phiên dịch viên Python khác.

>>> 1010 >>> _10 >>> _ * 330 >>> _ * 20600

Để bỏ qua & nbsp; giá trị

Các dấu gạch dưới cũng được sử dụng để bỏ qua các giá trị cụ thể. Nếu bạn không cần các giá trị cụ thể hoặc các giá trị không được sử dụng, chỉ cần gán các giá trị cho dấu gạch dưới.

_ # Bỏ qua một giá trị khi giải nén_x, _, y = (1, 2, 3) # x = 1, y = 3

# Bỏ qua nhiều giá trị. Nó được gọi là "Giải nén mở rộng" chỉ có sẵn trong Python 3.xx, *_, y = (1, 2, 3, 4, 5) # x = 1, y = 5

_# Bỏ qua index_for _ trong phạm vi (10): do_somothing ()

# Bỏ qua một giá trị của vị trí cụ thể cho _, val trong list_of_tuple: do_somothing ()

Đưa ra ý nghĩa đặc biệt cho tên của các biến và hàm

Các dấu gạch dưới có thể được sử dụng nhiều nhất trong ‘đặt tên. PEP8 là Hướng dẫn Công ước Python giới thiệu 4 trường hợp đặt tên sau đây.

** _ SINGLE_LEADING_UNDERSCORE ** Công ước này được sử dụng để khai báo các biến riêng, chức năng, phương thức và lớp trong một mô -đun. Bất cứ điều gì với quy ước này đều bị bỏ qua trong ____ 6. & nbsp; Tuy nhiên, tất nhiên, Python không hỗ trợ thực sự riêng tư, vì vậy chúng tôi không thể buộc một cái gì đó riêng tư và cũng có thể gọi nó trực tiếp từ các mô -đun khác. Vì vậy, đôi khi chúng tôi nói nó là chỉ báo sử dụng nội bộ yếu.private variables, functions, methods and classes in a module. Anything with this convention are ignored in from module import *. However, of course, Python does not supports truly private, so we can not force somethings private ones and also can call it directly from other modules. So sometimes we say it “weak internal use indicator”.

_iNternal_name = 'One_Nodule' # private Biến_Internal_version = '1.0' # Biến riêng tư

Lớp _Base: # private class_hidden_factor = 2 # Biến riêng tư

def \_\_init\_\_(self, price):  
    self.\_price = price

def \_double\_price(self): # private method  
    return self.\_price \* self.\_hidden\_factor

def get\_double\_price(self):  
    return self.\_double\_price() 

** Đơn_trailing_underscore _ ** Công ước này có thể được sử dụng để tránh xung đột với các từ khóa hoặc từ khóa Python. Bạn có thể không sử dụng nó thường xuyên.

Tkinter.toplevel (chủ, lớp _ = 'className') # Tránh xung đột với từ khóa 'lớp'

list_ = list.objects.get (1) # Tránh xung đột với loại 'Danh sách' tích hợp

** __ double_leading_underscore ** Đây là về cú pháp chứ không phải là một quy ước. Double nhấn mạnh sẽ xử lý các tên thuộc tính của một lớp để tránh xung đột tên thuộc tính giữa các lớp. . Với Double UnderCore. & NBSP; nghĩa là, nếu bạn viết phương thức có tên là __method, trong một lớp, tên sẽ bị xáo trộn trong mẫu _ classname__Method.

Lớp A: Def _Single_Method (self): Pass

def \_\_double\_method(self): # for mangling  
    pass

Lớp B (a): def __double_method (self): # cho ManglingPass

Do các thuộc tính được đặt tên với Double Undercore sẽ bị xáo trộn như trên, chúng ta không thể truy cập nó bằng phương thức ClassMame .__ Phương thức. Đôi khi, một số người sử dụng nó như những người thực sự sử dụng các tính năng này, nhưng nó không dành cho riêng tư và không được khuyến nghị cho điều đó. Để biết thêm chi tiết, đọc đặt tên Python.

** __ double_lead_and_trailing_underscore __ ** Công ước này được sử dụng cho các biến hoặc phương thức đặc biệt (được gọi là Phương pháp ma thuật Hồi giáo) như ____, __len__. Các phương pháp này cung cấp các tính năng cú pháp đặc biệt hoặc làm những điều đặc biệt. Ví dụ: __file__ chỉ ra vị trí của tệp Python,

def \_\_double\_method(self): # for mangling  
    pass
0 được thực thi khi biểu thức
def \_\_double\_method(self): # for mangling  
    pass
1 bị loại bỏ. & NBSP; Một người dùng tất nhiên có thể tạo phương thức đặc biệt tùy chỉnh, đó là trường hợp rất hiếm, nhưng thường có thể sửa đổi một số phương thức đặc biệt tích hợp. (ví dụ: bạn nên khởi tạo lớp với __init__ sẽ được thực thi lúc đầu khi một thể hiện của lớp được tạo.)

Lớp A: def __init __ (self, a): # sử dụng phương pháp đặc biệt '__init__' để khởi tạo

def \_\_custom\_\_(self): # custom special method. you might almost do not use it  
    pass

Khi các chức năng quốc tế hóa (I18N)/Nội địa hóa (L10N)

Đó chỉ là quy ước, không có bất kỳ chức năng cú pháp nào. Nghĩa là, dấu gạch dưới không có nghĩa là i18n/l10n, và nó chỉ là một quy ước liên kết biến i18n/l10n với dấu gạch dưới đã được từ Django là Python Web Framework hỗ trợ I18N/L10N cũng giới thiệu và sử dụng quy ước này.i18n/l10n, and it is just a convention that binds the i18n/l10n to underscore variable has been from C convention.The built-in library

def \_\_double\_method(self): # for mangling  
    pass
3 which is for i18n/l10n uses this convention, and Django which is Python web framework supports i18n/l10n also introduces and uses this convention.

# Xem tài liệu chính thức: https://docs.python.org/3/l Library/gettext.htmlimport getText

gettext.bindtextdomain ('myApplication', '/path/to/my/ngôn ngữ/thư mục')

# ...

print(_('This is a translatable string.'))

Để phân tách các chữ số của số theo nghĩa đen & nbsp;

Tính năng này đã được thêm vào Python 3.6. Nó được sử dụng để phân tách các chữ số của các số bằng cách sử dụng dấu gạch dưới cho khả năng đọc.

Dec_base = 1_000_000BIN_BASE = 0B_1111_0000HEX_BASE = 0X_1234_ABCD

in (dec_base) # 1000000print (bin_base) # 240print (hex_base) # 305441741

Sự kết luận

Cho đến nay, chúng tôi đã bao gồm dấu gạch dưới của Python. Trong khi tôi là một lập trình viên Python, tôi đã không biết một số trong số họ cho đến khi viết bài này. Đặc biệt, i18n/l10n rất mới đối với tôi. Giống như tôi, tôi hy vọng bạn có được một số kiến ​​thức hữu ích về việc nhấn mạnh từ bài đăng này.i18n/l10n is very new to me.Like me, I hope you gain some useful knowledges about underscore from this post.

Tiếp theo, tôi sẽ bao gồm những điều thú vị hơn về Python. Cảm ơn bạn.

_UPDATE_ADDED Tính năng mới (PEP 515) đã được thêm vào trong Python 3.6Added the new feature (PEP 515) was added in Python 3.6

Hacker Noon là cách tin tặc bắt đầu buổi chiều của họ. Chúng tôi là một phần của @Amif Family. Chúng tôi hiện đang chấp nhận đệ trình và vui lòng thảo luận về các cơ hội quảng cáo và tài trợ.

Để tìm hiểu thêm, hãy đọc trang Giới thiệu của chúng tôi, như/nhắn tin cho chúng tôi trên Facebook hoặc đơn giản là tweet/dm @hackernoon.

Nếu bạn thích câu chuyện này, chúng tôi khuyên bạn nên đọc những câu chuyện công nghệ mới nhất và những câu chuyện công nghệ xu hướng của chúng tôi. Cho đến lần tiếp theo, don lồng coi thực tế của thế giới là điều hiển nhiên!

ĐANG TẢI. . . Nhận xét và nhiều hơn nữa!
. . . comments & more!

__ trong chức năng Python là gì?

Việc sử dụng Double Undercore (__) trước tên (cụ thể là tên phương thức) không phải là một quy ước; Nó có một ý nghĩa cụ thể cho thông dịch viên. Python mang các tên này và nó được sử dụng để tránh các cuộc đụng độ tên với các tên được xác định bởi các lớp con.used to avoid name clashes with names defined by subclasses.

__ biến trong Python là gì?

Double dẫn đầu và dấu gạch ngang (__var__): chỉ ra các phương pháp đặ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. UnderCore (_): Đôi khi được sử dụng làm tên cho các biến tạm thời hoặc không đáng kể (không quan tâm đến).

Tại sao __ tên __ được sử dụng trong Python?

__name__ là một biến tích hợp để đánh giá theo tên của mô-đun hiện tại.Do đó, nó có thể được sử dụng để kiểm tra xem tập lệnh hiện tại đang được tự mình chạy hay được nhập ở một nơi khác bằng cách kết hợp nó với câu lệnh IF, như được hiển thị bên dưới.to check whether the current script is being run on its own or being imported somewhere else by combining it with if statement, as shown below.

__ Mô -đun __ Python là gì?

Thuộc tính __module__ được dự định để truy xuất mô-đun trong đó hàm được xác định, để đọc mã nguồn hoặc đôi khi để nhập lại nó trong một tập lệnh.intended for retrieving the module where the function was defined, either to read the source code or sometimes to re-import it in a script.