国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python中的下劃線(譯文)

rollback / 3100人閱讀

摘要:原文地址這篇文章討論中下劃線的使用。跟中很多用法類似,下劃線的不同用法絕大部分不全是都是一種慣例約定。這種情況,單下劃線經常被用作國際化和本地化字符串翻譯查詢的函數名。

原文地址
這篇文章討論Python中下劃線_的使用。跟Python中很多用法類似,下劃線_的不同用法絕大部分(不全是)都是一種慣例約定。

單個下劃線(_

主要有三種情況:

1. 解釋器中

_符號是指交互解釋器中最后一次執行語句的返回結果。這種用法最初出現在CPython解釋器中,其他解釋器后來也都跟進了。

>>> _
Traceback (most recent call last):
  File "", line 1, in 
NameError: name "_" is not defined
>>> 42
>>> _
42
>>> "alright!" if _ else ":("
"alright!"
>>> _
"alright!"
2. 作為名稱使用

這個跟上面有點類似。_用作被丟棄的名稱。按照慣例,這樣做可以讓閱讀你代碼的人知道,這是個不會被使用的特定名稱。舉個例子,你可能無所謂一個循環計數的值:

n = 42
for _ in range(n):
    do_something()
3. i18n

_還可以被用作函數名。這種情況,單下劃線經常被用作國際化和本地化字符串翻譯查詢的函數名。這種慣例好像起源于C語言。舉個例子,在 Django documentation for translation 中你可能會看到:

from django.utils.translation import ugettext as _
from django.http import HttpResponse

def my_view(request):
    output = _("Welcome to my site.")
    return HttpResponse(output)

第二種和第三種用法會引起沖突,所以在任意代碼塊中,如果使用了_作i18n翻譯查詢函數,就應該避免再用作被丟棄的變量名。

單下劃線前綴的名稱(例如_shahriar

以單下劃線做前綴的名稱指定了這個名稱是“私有的”。在 有些 導入import * 的場景中,下一個使用你代碼的人(或者你本人)會明白這個名稱僅內部使用。Python documentation里面寫道:

  

a name prefixed with an underscore (e.g. _spam) should be treated as a non-public part of the API (whether it is a function, a method or a data member). It should be considered an implementation detail and subject to change without notice.

之所以說在在 有些 import * 的場景,是因為導入時解釋器確實對單下劃線開頭的名稱做了處理。如果你這么寫from import *,任何以單下劃線開頭的名稱都不會被導入,除非模塊/包的__all__列表明確包含了這些名稱。更多相關信息見““Importing * in Python”。

雙下劃線前綴的名稱(例如__shahriar

以雙下劃線做前綴的名稱(特別是方法名)并不是一種慣例;它對解釋器有特定含義。Python會改寫這些名稱,以免與子類中定義的名稱產生沖突。Python documentation中提到,任何__spam這種形式(至少以兩個下劃線做開頭,絕大部分都還有一個下劃線做結尾)的標識符,都會文本上被替換為_classname__spam,其中classname是當前類名,并帶上一個下劃線做前綴。
看下面這個例子:

>>> class A(object):
...     def _internal_use(self):
...         pass
...     def __method_name(self):
...         pass
... 
>>> dir(A())
["_A__method_name", ..., "_internal_use"]

正如所料,_internal_use沒有變化,但__method_name被改寫成了_ClassName__method_name。現在創建一個A的子類B(這可不是個好名字),就不會輕易的覆蓋掉A中的__method_name了:

>>> class B(A):
...     def __method_name(self):
...         pass
... 
>>> dir(B())
["_A__method_name", "_B__method_name", ..., "_internal_use"]

這種特定的行為差不多等價于Java中的final方法和C++中的正常方法(非虛方法)。

前后都帶有雙下劃線的名稱(例如__init__

這些是Python的特殊方法名,這僅僅是一種慣例,一種確保Python系統中的名稱不會跟用戶自定義的名稱發生沖突的方式。通常你可以覆寫這些方法,在Python調用它們時,產生你想得到的行為。例如,當寫一個類的時候經常會覆寫__init__方法。
你也可以寫出自己的“特殊方法”名(但是別這么做):

>>> class C(object):
...     def __mine__(self):
...         pass
...
>>> dir(C)
... [..., "__mine__", ...]

還是不要這樣寫方法名,只讓Python定義的特殊方法名使用這種慣例吧。


hackernews和reddit上的相關討論

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37494.html

相關文章

  • PSR-4:自動加載

    摘要:概述這份聲明了關于從文件路徑自動加載類的規范。當根據完全限定類名加載對應的文件時由最開始的命名空間開始,連續的一個或多個命名空間組成的序列,不包括最前面的命名空間分隔符,在這個完全限定類名中這個序列稱為命名空間前綴,對應了至少一個基礎目錄。 PSR-4:自動加載 翻譯:薛粲授權許可:CC BY-NC 4.0 這份文檔是《PSR-4: Autoloader》的非官方譯文。 英文原文使用的...

    ZweiZhao 評論0 收藏0
  • Python爬蟲學習路線

    摘要:以下這些項目,你拿來學習學習練練手。當你每個步驟都能做到很優秀的時候,你應該考慮如何組合這四個步驟,使你的爬蟲達到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學習不是一朝一夕的事情,建議多看看一些比較優秀的爬蟲的設計方案,比如說。 (一)如何學習Python 學習Python大致可以分為以下幾個階段: 1.剛上手的時候肯定是先過一遍Python最基本的知識,比如說:變量、數據結構、語法...

    liaoyg8023 評論0 收藏0
  • 譯文」JavaScript核心

    摘要:在這個情況下我們可能需要使用構造函數,其以指定的模式來創造對象。構造函數也有自己的,值為,也通過其屬性關聯到。從邏輯上來說,這是以棧的形式實現的,它叫作執行上下文棧。 原文:http://dmitrysoshnikov.com/ecmascript/javascript-the-core/ 對象 原型鏈 構造函數 執行上下文棧 執行上下文 變量對象 活動對象 作用域鏈 閉包 Thi...

    高璐 評論0 收藏0
  • 【譯】Python的優雅技巧

    摘要:你可以進行如下操作需要注意的是這個竅門只適用于。在中就不需要進行操作了,因為它已經默認進行了。這里有幾個例子可以供你參考譯文出處本文根據的所譯,整個譯文帶有我自己的理解與思想,如果譯得不好或有不對之處還請同行朋友指點。 枚舉 不要這么做: i = 0 for item in iterable: print i, item i += 1 而是這樣: for...

    legendaryedu 評論0 收藏0
  • 如何自定義Flask中的響應類(譯文

    摘要:在使用自定義響應類的應用中,和無法知道自定義類的細節,所以它們使用標準響應類來創建響應。有了這個自定義響應類,任何滿足格式要求的文檔都會自動被標記為內容類型,而其他響應則會繼續獲得默認的內容類型。 譯文鏈接:編程派 原文鏈接:Flask Web Development作者的博客 有翻譯或理解不對的地方,望大家指正! Flask框架中的響應類,命名很貼切,叫Response。不過...

    ruicbAndroid 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<