程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

你真的懂Python命名嗎?

編輯:Python

轉載請注明出處️

作者:測試蔡坨坨

原文鏈接:caituotuo.top/7417a7f0.html


大家好,我是測試蔡坨坨。

今天,我們來聊一下Python命名那些事兒。

名為萬物之始,萬物始於無名,道生一,一生二,二生三,三生萬物。

“怎麼給變量命名?”看似是一個非常基礎的內容,但還是有很多人在這個部分有一點迷茫。

命名常常被認為是編程中的細節問題,其重要性往往被低估。而所謂的工匠精神,往往體現在細節之處。

程序員在工作中有80%的時間都在閱讀和理解代碼,好的命名可以提高代碼的可讀性和表達力,詞不達意的命名則會讓人摸不著頭腦,增加不必要的思維開銷。

學好Python,從變量命名開始。

合法的變量名

什麼是合法的變量名?

所謂合法的變量名就是Python解釋器能夠認識的變量名。

也是在編碼過程中必須遵循的規則,假設不遵守規則,程序就會報錯。

在Python中,一個合法的變量名是由字母下劃線數字組成,並且第一個字符不能為數字。

在Python3中,對字母的定義其實是廣義的,你可以寫一個中文的變量名,也就是說你可以認為中文的這個字也算一種字母,但是一般來說不推薦使用中文變量名,因為有時候可能會由於一些編碼的原因產生一些莫名其妙的bug。

caituotuo_666 = "測試蔡坨坨" # √
# 666caituotuo_666 = "測試蔡坨坨" # × 數字開頭不合法
蔡坨坨 = "測試蔡坨坨" # √ 不推薦

好的變量名

合法的變量名顯然給了我們很大的操作空間,我們可以給變量取各式各樣、千奇百怪的名字。

什麼是好的變量名?

好的變量名是一種命名規范,雖然不遵循命名規范,程序仍然可以運行,但是使用命名規范可以更加直觀地了解代碼所代表的含義,因此和Python開發人員用同一套命名系統就顯得很重要。

我們可以從內容和形式上判斷一個變量名的好壞。

內容

從內容的角度就是這個變量名傳遞了多少有效信息,是否是一個有意義的變量名。有意義的變量名可以達到代碼即文檔的效果,有較高的可讀性,不需要借助注釋和文檔,代碼本身就能顯性地表達開發者的意圖。

例如以下三個變量:

n = "測試蔡坨坨"
name = "測試蔡坨坨"
username = "測試蔡坨坨"
  • 三個變量都代表用戶名
  • 相對於name,明顯username傳遞出來的有效信息更多
  • 當你的變量名包含的有效信息夠多的時候就是一個好的變量名

但是,是不是有效信息越多越好,顯然並不是,我們還需要在有效信息和變量名長度上做取捨(這二者之間的平衡取決於項目本身和經驗積累),不應該為了展示更多的信息把變量名整的無限長,並不是一寸長一寸強,例如下面這個變量名就顯得過長了

student_system_login_username = "測試蔡坨坨"

形式

在編碼過程中,一個變量名有時候需要用到兩個及以上的單詞,當這些單詞擠在一起時,我們很難去分清誰是誰。所以在形式上我們又有四種不同的變量名寫法:

lower_underscore = "測試蔡坨坨"
UPPER_UNDERSCORE = "測試蔡坨坨"
CamelCase = "測試蔡坨坨"
mixedCase = "測試蔡坨坨"
  • lower_underscore:小寫字母跟下劃線
  • UPPER_UNDERSCORE:大寫字母跟下劃線
  • CamelCase:駝峰命名中的大駝峰,通過首字母大寫的方式來區別單詞
  • mixedCase:駝峰命名中的小駝峰,與大駝峰的區別就是第一個字母為小寫

推薦的變量名

什麼是被推薦的變量名?

Naming Convention 命名規范

在PEP8裡面就有比較詳細的描述,原文地址:https://peps.python.org/pep-0008/#naming-conventions

Naming Convention的核心就是consistency(一致性)

官方的意思大概是:

  • Python庫的命名規范有點亂,所以永遠不會完全一致
  • 盡管如此,還是有目前推薦的命名標准
  • 新的模塊和包(包括第三方框架)應該按照這些標准編寫,但如果現有庫具有不同的風格,則優先考慮內部一致性

當你看到一個變量名的時候,如何快速分辨出是變量 or 常量 or 類 or 函數 or …?

就需要有一致性,也就是說好的變量不僅僅是讓你的程序變得好看,同時也能提高編程效率。

Python中使用的變量格式

在Python中用到的格式有三種:lower_underscore、UPPER_UNDERSCORE、CamelCase,不會用到mixedCase。

  • lower_underscore:小寫字母跟下劃線(除了常量和類名,剩下的所有名字都是小寫下劃線,包括:module模塊variable變量function函數method方法,他們在Python中通常被看做是一個變量被使用、被傳遞,所以他們的命名方式是一致的)

  • UPPER_UNDERSCORE:大寫字母跟下劃線,只用來表示常量(其實在Python中並沒有真正的常量,更多的是一種約定,你別動我也別動,因此當你要表示常量的時候就可以用大寫下劃線,同時在Python標准庫中你看到大寫下劃線也就知道它是個常量)

  • CamelCase:駝峰命名中的大駝峰,通過首字母大寫的方式來區別單詞,只用來表示

  • mixedCase:駝峰命名中的小駝峰,與大駝峰的區別就是第一個字母為小寫(不會在Python中使用)

Python中的下劃線“_”

單下劃線 _

在Python解釋器中,對單下劃線是有特殊感情的。

  • 單下劃線也是Python中一個合法的變量名,通常被當做占位符使用

    for _ in range(5):
    print("測試蔡坨坨") for i in range(5):
    print("測試蔡坨坨")

    從上面的程序可以看出,使用“_”比使用“i”表達出更多的信息,就是顯性地告訴別人這個變量是沒有用的。

  • _ 會指向你最後一次執行的表達式

  • 使用單個下劃線來格式化變量的值,例如金額,通過這樣的寫法我們能夠更加易讀

    total_value = 8_000_000_000
    print(total_value) # 8000000000

前置下劃線 prefix

在Python中,前置下劃線在語義和功能上都有可能對變量本身造成一定的影響。

單前置下劃線 _xx

單下劃線在Python中叫弱私有(weak “internal use” ),在語義上表達的是private性質,也就是友好給告訴別人這並不是開放的接口,當你使用from module import * 的時候它是不會import單下劃線開頭的變量的,但是如果你強制使用它還是可以使用的,因此叫做弱私有。

class MyClass:
def _get_name(self):
print("測試蔡坨坨") def get_name(self):
print("測試蔡坨坨")

雙前置下劃線 __xx

與弱私有相對應的就是強私有,在Python的class definition裡面用雙前置下劃線表示強私有,強行引用就會報錯,可以防止被子類重寫。

class MyClass:
def __get_name(self):
print("測試蔡坨坨")

其實強私有也是有辦法使用的,也就是防君子不妨小人,Python實際上是在class definition裡面對雙下劃線開頭的變量進行一個重命名,就是在雙下劃變量的前面加一個_class名,如果打印的是obj._MyClass__get_name(),還是能正常運行的

後置下劃線 xx_

我們知道Python中有很多關鍵詞,例如:class、def、return、pass……,他們都有特殊的定義和意義,所以我們在定義變量或方法的時候不可以使用它們來命名,比如以下代碼就是錯誤的:

# 錯誤示范
def my_func(pass):
class = 1
return class

如果我們就是想這樣定義名稱,為了區分,可以在後面添加一個下劃線(不過不建議這樣命名,雖然它是合法的,但是有那麼多名稱何必去定義關鍵詞相關的名稱呢)

def my_func(pass_):
class_ = 1
return class_

前後各有兩個下劃線 __xx__

dunderscore:double underscore

專門表示Python中的魔術函數magic method,都是一些Python內置好的一些函數,我們可以拿來就使用,例如:類的初始化方法__init____call__

對於Python使用者來說就是不要用,自己定義的方法永遠不要用到這種形式(Never invent such names; only use them as documented.)

其他注意事項

在起名的時候不要覆蓋Python中內置的方法(builtin method)

# 錯誤示范
list = [1, 2, 3, 4] # ×
dict = {"username": "測試蔡坨坨"} # ×
str = "測試蔡坨坨" # ×

在給文件起名的時候,也不要跟內置的module重名,例如:os.py、selenium.py、turtle.py,都是不可取的。

你真的懂Python命名嗎?的更多相關文章

  1. 踩過了這些坑,你真的懂python基礎嗎?

    一.浮點數的計算 思考1:打印結果是什麼? a = 0.1 b = 0.2 c = 0.3 print(b == a + a) 思考2:打印結果是什麼? a = 0.1 b = 0.2 c = 0.3 ...

  2. 你真的會python嘛?

    前言 我這個博客一直都是一些技術分享,show code的地方,我從來沒有寫過個人生活或者情感雜談,當然我也從來沒有談論過我對什麼東西的喜惡. 很多人喜歡噴XX語言,喜歡談論XX和YY的優缺,甚至湊了 ...

  3. python—命名規范

    文件名全小寫,可使用下劃線 包應該是簡短的.小寫的名字.如果下劃線可以改善可讀性可以加入.如mypackage. 模塊與包的規范同.如mymodule. 類總是使用首字母大寫單詞串.如MyClass. ...

  4. 理解Python命名機制

    理解Python命名機制 本文最初發表於戀花蝶的博客(http://blog.csdn.net/lanphaday),歡迎轉載,但必須保留此聲明且不得用於商業目的.謝謝. 引子 我熱情地邀請大家猜測下 ...

  5. python——雙下劃線與python命名機制

    python中雙下劃線的作用(1)所有以雙下劃線開頭的成員是私有的(2)python對於私有變量是會進行扎壓(mangling)的,扎壓規則是原始定義:class A():    __function ...

  6. 你真的懂Redis的5種基本數據結構嗎?

    摘要: 你真的懂Redis的5種基本數據結構嗎?這些知識點或許你還需要看看. 本文分享自華為雲社區<你真的懂Redis的5種基本數據結構嗎?這些知識點或許你還需要看看>,作者:李子捌. 一 ...

  7. [C#] C# 知識回顧 - 你真的懂異常(Exception)嗎?

    你真的懂異常(Exception)嗎? 目錄 異常介紹 異常的特點 怎樣使用異常 處理異常的 try-catch-finally 捕獲異常的 Catch 塊 釋放資源的 Finally 塊 一.異常介 ...

  8. 【轉】你真的理解Python中MRO算法嗎?

    你真的理解Python中MRO算法嗎? MRO(Method Resolution Order):方法解析順序. Python語言包含了很多優秀的特性,其中多重繼承就是其中之一,但是多重繼承會引發很多 ...

  9. python—命名規范(轉)

    文件名全小寫,可使用下劃線 包應該是簡短的.小寫的名字.如果下劃線可以改善可讀性可以加入.如mypackage. 模塊與包的規范同.如mymodule. 類總是使用首字母大寫單詞串.如MyClass. ...

  10. 【轉】was mutated while being enumerated 你是不是以為你真的懂For...in... ??

    原文網址:http://www.jianshu.com/p/ad80d9443a92 支持原創,如需轉載, 請注明出處你是不是以為你真的懂For...in... ??哈哈哈哈, 我也碰到了這個報錯 . ...

隨機推薦

  1. LoadRunner腳本設計、場景設計和結果分析

    本次筆記主要記錄LoadRunner腳本設計.場景設計和結果分析   1. 腳本設計       錄制模式            手工模式:插入步驟.手動編寫       1.1  腳本增強:     ...

  2. delegate and event

    事件是特殊的委托 委托:第一個方法注冊用“=”,是賦值語法,因為要進行實例化,第二個方法注冊則用的是“+=”   修飾符應該public的時候public,應該private的時候private 事件 ...

  3. 51Nod 歡樂手速場1 A Pinball[DP 線段樹]

    Pinball xfause (命題人)   基准時間限制:1 秒 空間限制:262144 KB 分值: 20 Pinball的游戲界面由m+2行.n列組成.第一行在頂端.一個球會從第一行的某一列出發 ...

  4. LinkedBlockingQueue 注記

    近期看一個音頻傳輸代碼時,對方采用了LinkedBlockingQueue為生產者.消費者模式,來支撐讀寫線程. 個人感覺非常不錯,因此也對這種方式進行總結,並梳理了一個基本的功能框架備用.主要兩點: ...

  5. linux bin &amp; sbin different

    linux bin & sbin different flutter & $PATH http://blog.taylormcgann.com/2014/04/11/differenc ...

  6. [轉]使用tee記錄mysql client 所有的操作,十個節省時間的mysql命令

    查看:tail -f /tmp/jack.txt 一:tee方法一.配置文件在服務器上的/etc/my.cnf中的[client]加入 tee =/tmp/client_mysql.log即可. 方法 ...

  7. IE11不能使用F12功能DOM資源管理器無法使用

    https://www.ludou.org/win7-ie-11-f12-bug.html 32位win7下載補丁:http://www.microsoft.com/zh-CN/download/de ...

  8. LeetCode--011--盛最多水的容器(java)

    給定 n 個非負整數 a1,a2,...,an,每個數代表坐標中的一個點 (i, ai) .在坐標內畫 n 條垂直線,垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0).找出其中的兩條線, ...

  9. Skype 服務器客戶端策略參數優化

    1.skype通訊錄原理 對於skype客戶端的通訊錄同步,首先說說原理,通訊簿信息是從AD同步的skype前端服務器(每天1:30),在從前端服務器同步的客戶端(大概1小時內同步一次). skype ...

  10. Apache 性能配置優化

    前言 最近在進行apache性能優化設置.在修改apache配置)文件之前需要備份原有的配置文件夾conf,這是網站架設的好習慣.以下的apache配置調優均是在red had的環境下進行的. htt ...


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved