Việc sử dụng _ trong python là gì?

Rất có thể bạn đã nhìn thấy biến

def myFunction():    print 'The value of __name__ is ' + __name__
2 khi xem qua mã Python. Dưới đây bạn thấy một đoạn mã ví dụ về giao diện của nó

if __name__ == '__main__':    main()

Trong bài viết này, tôi muốn chỉ cho bạn cách bạn có thể sử dụng biến này để tạo các mô-đun trong Python

Tại sao biến _ _name_ _ được sử dụng?

Biến

def myFunction():    print 'The value of __name__ is ' + __name__
2 (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

Nhờ biến đặc biệt này, bạn có thể quyết định xem mình có muốn chạy tập lệnh hay không. Hoặc bạn muốn nhập các chức năng được xác định trong tập lệnh

Biến __name__ có thể chứa những giá trị nào?

Khi bạn chạy tập lệnh của mình, biến

def myFunction():    print 'The value of __name__ is ' + __name__
2 bằng với
def myFunction():    print 'The value of __name__ is ' + __name__
5. Khi bạn nhập tập lệnh chứa, nó sẽ chứa tên của tập lệnh

Chúng ta hãy xem xét hai trường hợp sử dụng này và mô tả quy trình bằng hai hình minh họa

Tình huống 1 - Chạy tập lệnh

Giả sử chúng tôi đã viết kịch bản

def myFunction():    print 'The value of __name__ is ' + __name__
0 như sau

def myFunction():    print 'The value of __name__ is ' + __name__
____3____0

Nếu bạn chạy nameScript. py, quá trình dưới đây được thực hiện

Trước khi tất cả các mã khác được chạy, biến

def myFunction():    print 'The value of __name__ is ' + __name__
2 được đặt thành __main__. Sau đó, các câu lệnh def
def myFunction():    print 'The value of __name__ is ' + __name__
2 và
def myFunction():    print 'The value of __name__ is ' + __name__
3 được chạy. Bởi vì điều kiện đánh giá là đúng, chức năng chính được gọi. Đến lượt mình, điều này gọi myFunction. Điều này in ra giá trị của
def myFunction():    print 'The value of __name__ is ' + __name__
5

Tình huống 2 - Nhập tập lệnh vào một tập lệnh khác

Nếu chúng tôi muốn sử dụng lại myFunction trong tập lệnh khác, ví dụ như

def myFunction():    print 'The value of __name__ is ' + __name__
5, chúng tôi có thể nhập
def myFunction():    print 'The value of __name__ is ' + __name__
0 dưới dạng mô-đun

Mã trong

def myFunction():    print 'The value of __name__ is ' + __name__
5 có thể như sau

def myFunction():    print 'The value of __name__ is ' + __name__
0
def myFunction():    print 'The value of __name__ is ' + __name__
1

Sau đó chúng tôi có hai phạm vi. một trong

def myFunction():    print 'The value of __name__ is ' + __name__
8 và phạm vi thứ hai của
def myFunction():    print 'The value of __name__ is ' + __name__
9. Trong hình minh họa, bạn sẽ thấy nó khác với trường hợp sử dụng đầu tiên như thế nào

Trong importScript. py biến

def myFunction():    print 'The value of __name__ is ' + __name__
2 được đặt thành __main__. Bằng cách nhập nameScript, Python bắt đầu tìm tệp bằng cách thêm
def main():    myFunction()
1 vào tên mô-đun. Sau đó, nó chạy mã có trong tệp đã nhập

Nhưng lần này nó được đặt thành nameScript. Một lần nữa các câu lệnh def cho main và myFunction được chạy. Nhưng, bây giờ điều kiện đánh giá là sai và chính không được gọi

Trong importScript. py chúng tôi gọi myFunction sẽ xuất ra nameScript. NameScript được biết đến với myFunction khi chức năng đó được xác định

Nếu bạn in

def myFunction():    print 'The value of __name__ is ' + __name__
2 trong bản nhập khẩu, điều này sẽ xuất ra
def myFunction():    print 'The value of __name__ is ' + __name__
5. Lý do cho điều này là Python sử dụng giá trị đã biết trong phạm vi của importScript

Phần kết luận

Trong bài viết ngắn này, tôi đã giải thích cách bạn có thể sử dụng biến

def myFunction():    print 'The value of __name__ is ' + __name__
2 để viết các mô-đun. Bạn cũng có thể tự chạy các mô-đun này. Điều này có thể được thực hiện bằng cách sử dụng giá trị của các biến này thay đổi như thế nào tùy thuộc vào nơi chúng xuất hiện.

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO


Việc sử dụng _ trong python là gì?
Bert Carremans

Nhà khoa học dữ liệu


Nếu bài viết này hữu ích, hãy tweet nó

Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu

Mặc dù dấu gạch dưới (_) chỉ được sử dụng cho các biến và hàm 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, cú pháp như

def main():    myFunction()
2,
def main():    myFunction()
3 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 trình thông 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 các biến hoặc chức năng
  4. Để sử dụng làm chức năng 'Quốc tế hóa (i18n)' hoặc 'Bản địa hóa (l10n)'
  5. Để tách các chữ số của giá trị chữ số

Hãy xem xét từng trường hợp

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

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

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

Đối với Bỏ qua các giá trị

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 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). làm việc gì đó()

# Bỏ qua giá trị của vị trí cụ thể cho _, val trong list_of_tuple. làm việc gì đó()

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

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 quy ước Python giới thiệu 4 trường hợp đặt tên sau

**_single_leading_underscore**Quy ước này được sử dụng để khai báo các biến, hàm, phương thức và lớp riêng tư trong một mô-đun. Bất cứ điều gì với quy ước này được bỏ qua trong

def main():    myFunction()
4. Tuy nhiên, tất nhiên, Python không hỗ trợ private thực sự, vì vậy chúng ta không thể ép cái nào đó là private và cũng có thể gọi nó trực tiếp từ các module khác. Vì vậy, đôi khi chúng tôi nói đó là “chỉ số sử dụng nội bộ yếu”

_internal_name = 'one_nodule' # biến riêng_internal_version = '1. 0' # biến riêng

lớp _Base. # lớp riêng_hidden_factor = 2 # biến riêng

def myFunction():    print 'The value of __name__ is ' + __name__
5

**single_trailing_underscore_**Quy ước này có thể được sử dụng để tránh xung đột với các từ khóa Python hoặc nội dung tích hợp. Bạn có thể không sử dụng nó thường xuyên

tkinter. Toplevel(master, class_='ClassName') # Tránh xung đột với từ khóa 'class'

danh sách_ = Danh sách. các đối tượng. get(1) # Tránh xung đột với loại tích hợp 'danh sách'

**__double_leading_underscore**Đây là cú pháp chứ không phải quy ước. dấu gạch dưới kép sẽ xáo trộn 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. (cái gọi là “xáo trộn” có nghĩa là trình biên dịch hoặc trình thông dịch sửa đổi các biến hoặc tên hàm theo một số quy tắc, không sử dụng nguyên trạng) Quy tắc xáo trộn của Python là thêm “_ClassName” vào trước các tên thuộc tính được khai báo bằng double . Nghĩa là, nếu bạn viết phương thức có tên “__method” trong một lớp, thì tên đó sẽ được đọc sai ở dạng “_ClassName__method”

hạng A. def _single_method(self). vượt qua

def myFunction():    print 'The value of __name__ is ' + __name__
6

hạng B(A). def __double_method(tự). # cho manglingpass

Do các thuộc tính được đặt tên với dấu gạch dưới kép sẽ bị đọc sai như trên, chúng ta không thể truy cập nó bằng “ClassName. __phương pháp". Đôi khi, một số người sử dụng nó giống như những người dùng riêng tư 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

**__double_leading_and_trailing_underscore__**Quy ướ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 thức ma thuật”), chẳng hạn như

def main():    myFunction()
5,
def main():    myFunction()
6. Các phương thức này cung cấp các tính năng cú pháp đặc biệt hoặc thực hiện những điều đặc biệt. Ví dụ:
def main():    myFunction()
7 cho biết vị trí của tệp Python,
def myFunction():    print 'The value of __name__ is ' + __name__
60 được thực thi khi biểu thức
def myFunction():    print 'The value of __name__ is ' + __name__
61 bị loại bỏ. Tất nhiên, người dùng có thể tạo phương thức đặc biệt tùy chỉnh, đây 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. (e. g. Bạn nên khởi tạo lớp với
def main():    myFunction()
5 sẽ được thực thi đầu tiên khi một thể hiện của lớp được tạo. )

hạng A. def __init__(bản thân, a). # sử dụng phương thức đặc biệt '__init__' để tự khởi tạo. một = một

def myFunction():    print 'The value of __name__ is ' + __name__
9

Là các chức năng Quốc tế hóa (i18n)/Bản địa hóa (l10n)

Nó 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ừ quy ước C. Thư viện tích hợp sẵn

def myFunction():    print 'The value of __name__ is ' + __name__
63 dành cho i18n/l10n sử dụng quy ước này và Django là khung web Python hỗ trợ i18n/l10n cũng giới thiệu và sử dụng quy ước này

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

lấy văn bản. bindtextdomain('myapplication','/path/to/my/language/directory')gettext. textdomain('myapplication')_ = gettext. lấy văn bản

#

def myFunction():    print 'The value of __name__ is ' + __name__
1

Để phân tách các chữ số của giá trị số bằng chữ

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 để dễ đọc

dec_base = 1_000_000bin_base = 0b_1111_0000hex_base = 0x_1234_abcd

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

Phần kết luận

Cho đến nay, chúng tôi đã đề cập đến phần 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ề gạch dưới từ bài viết này

Tiếp theo, tôi sẽ đề cập đến 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 Python 3. 6

Hacker Noon là cách hacker bắt đầu buổi chiều của họ. Chúng tôi là một phần của @AMIfamily. Chúng tôi hiện đang chấp nhận đệ trình và sẵn 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, thích/nhắn tin cho chúng tôi trên Facebook hoặc đơn giản hơ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 của chúng tôi và những câu chuyện công nghệ thịnh hành. Cho đến lần sau, đừng coi thực tế của thế giới là điều hiển nhiên

Cái gì dành cho _ trong phạm vi Python?

Khi bạn không quan tâm đến một số giá trị do hàm trả về chúng tôi sử dụng dấu gạch dưới thay cho tên biến. Về cơ bản, điều đó có nghĩa là bạn không quan tâm đến việc vòng lặp được chạy bao nhiêu lần cho đến bây giờ mà chỉ là nó sẽ chạy một số lần cụ thể về tổng thể.

__ __ Python nghĩa là gì?

Hai dấu gạch dưới ở đầu. Nó nên được sử dụng để tránh phương thức của bạn bị lớp con ghi đè hoặc vô tình truy cập. Hãy xem một ví dụ. hạng A (đối tượng). def __test(bản thân). print "Tôi là một phương pháp kiểm tra trong lớp A" def test(self). bản thân

Chúng ta có thể sử dụng _ làm tên biến trong Python không?

Tên biến phải bắt đầu bằng một chữ cái hoặc ký tự gạch dưới. Tên biến không được bắt đầu bằng số. Tên biến chỉ có thể chứa các ký tự chữ và số và dấu gạch dưới (A-z, 0-9 và _ )

Bản thân _ trong Python là gì?

Tham số self là tham chiếu đến phiên bản hiện tại của lớp và được sử dụng để truy cập các biến thuộc về lớp.