首頁 > 軟體

詳解Python變數與註釋高階用法

2022-08-06 14:01:05

Python變數與註釋高階用法

1.概述

好的變數和註釋並非為計算機而寫,而是為每個閱讀程式碼的人而寫。變數與註釋是表達作者思想的基礎,他們對程式碼質量的貢獻母庸質疑。

2.變數

2.1.變數解包

1.什麼是變數解包

把一個可迭代物件的所有成員,一次性的賦值給多個變數的過程就是變數解包。

2.變數解包語法

# 變數解包
username = ['zhangsan', '18']
name, age = username
print('name:{}, age:{} '.format(name, age))

# 巢狀型別變數解包
username = [1, ['zhangsan', 18]]
number, (name, age) = username
print('number:{}, name:{}, age:{}'.format(number, name, age))

# 匹配模式解包
data = ['zhangsan', 'banana', 'apple', 'orange', 18]
name, *fruits, score = data
print('name:{}, fruits:{}, score:{}'.format(name, fruits, score))

# 切片解包
data = ['zhangsan', 'banana', 'apple', 'orange', 18]
name, fruits, score = data[0], data[1:-1], data[-1]
print('name:{}, fruits:{}, score:{}'.format(name, fruits, score))

# 變數解包用到for迴圈
for name, age in [('zhangsan', 15), ('lisi', 18)]:
    print('name:{}, age:{}'.format(name, age))

# 單下劃線變數名
username = ['zhangsan', 19]
name, _ = username
print(name, _)

2.2.給變數註明型別

1.變數註明型別介紹

python給變數註明型別,與java變數型別不同,python的變數型別只是一種提示功能,不提供任何校驗功能。
因此傳入的變數型別與校驗型別不一致也不會報錯。

變數註明型別語法非常簡單,在變數名稱後面用冒號分隔表名型別即可。

2.變數註明型別範例

# list表示引數為列表型別,int表示裡面的成員是整形
def remove_invalid(item: list[int]):
    print(item)
# 傳入符合變數型別引數
remove_invalid([1, 2, 3])
# 傳入不符合變數型別引數,不影響函數執行結果。
remove_invalid(1)

# 型別註解使用demo
class Duck:
    def __init__(self, color:str):
        self.color = color
    # 為quack方法註明返回值型別為None
    def quack(self) -> None:
        print(f"Hi, I'm a {self.color} duck")

# -> List[Duck]:用typing模組的List物件為函數返回值標註具體型別
def create_random_ducks(number:int) -> List[Duck]:
    # 為變數加上型別宣告
    ducks: List[Duck] = []

    for _ in number:
        color = random.choice(['yellow', 'white', 'gray'])
        ducks.append(Duck(color=color))
    return ducks
ducks = create_random_ducks((1,2,3))
for duck in ducks:
    duck.quack()

2.3.變數命名原則

給變數起名主要有兩種流派:一是通過大小寫界定單詞的駝峰命名,例如Java語言。二是通過下劃線連線的蛇形命名,例如python語言。

  • 遵循PEP8原則
  • 描述性要強
  • 長度儘量短
  • 變數註明型別
  • 超短命名

1.遵循PEP8原則

PEP8原名《Python Enhacement Proposal #8》譯為《8 號 Python 增強規範》為程式碼編寫風格提供了指南,變數命名部分規範如下。

  • 普通變數,使用蛇形命名法,比如max_value
  • 常數,採用全部大寫字母,使用下劃線連線,比如 MAX_VALUE
  • 僅內部使用變數,在變數前增加下劃線字首,比如 _local_var
  • 變數名稱與python關鍵字衝突時,在變數末尾追加下劃線,比如 class_

2.描述性要強

寫作過程中一項重要的工作就是為句子斟酌恰當的詞語,不同的詞語描述性的強弱是不同的。比如”冬天傲骨的梅花“ 就比 ”花“ 描述性要強。為變數命名和詞語一樣,同樣有描述性強弱之分。
下面是描述性強弱不同的變數,對比可以感受到描述性強的變數名稱使程式碼更易讀。

# 描述性弱的變數名稱:看不出它在描述什麼
vlaue = process(s.strip())

# 描述性強的變數名稱:從使用者輸入引數中解析出使用者名稱稱,並剔除引數中的空格。
username = extract_username(input_string.strip())

3.長度儘量短

假如一個特別長的重複出現,讀者不會覺得它精確,反而是囉嗦難讀。在保證描述性清晰前提下,儘量讓名字簡短易讀,通常控制在4個單詞內。

4.變數註明型別

雖然python的變數不需要宣告型別,但是為了提升可讀性,我們可以為變數註明型別。
除了為變數註明型別外,還有約定俗稱的變數名稱與型別建立匹配關係,下面是一些變數名稱和型別匹配的例子。

變數名含義說明
is_superuser是否是超級使用者is 表示是或不是
has_errors有沒有錯hans 表示有或沒有
allow_empty是否允許空值allow表示是否允許

5.超短命令

在變數命名中有一類名稱比較特別,只有一兩個字母,通常他們分為兩類,一類是大家約定俗稱的短名字,另一類是起別名。

約定俗稱常用名稱

  • 陣列索引三劍客 i、j、k
  • 某個整數 n
  • 某個字串 s
  • 某個異常 e
  • 檔案物件 fp

長名稱起別名

is_not_normal as l

3.註釋

註釋不會影響程式碼的行為,它會影響程式碼的可讀性。

3.1.註釋型別

python的註釋分為兩種,一種是程式碼內註釋,一種是函數、類的註釋也稱為介面註釋。

行內註釋

# 使用strip()去掉空格的好處:
# 1.資料庫儲存資料時佔用空間更小
# 2.不必因為使用者多打了空格而要求使用者重新輸入。

username = extract_username(input_string.strip())

介面註釋

class Person:
	# 使用三個單引號或三個雙引號就是介面註釋。
	'''人
	:param name: 姓名
	: param age: 年齡
	: param favrite_color: 最喜歡的顏色
	'''
	def __init__(self, name, age, favrite_color):
		self.name = name
		self.age = age
		self.favrite_color = color

3.2.錯誤使用註釋案例

1.用註釋遮蔽程式碼

在程式設計中會用註釋遮蔽程式碼,如果這些程式碼不需要了可以直接刪掉,如果需要用到這些程式碼可以從Git倉庫中找到。臨時註釋掉的大段程式碼,對於閱讀程式碼的人來說是一種干擾,沒有任何意義。

2.用註釋複述程式碼

# 呼叫strip()去掉空格
input_string = input_string.strip()

上面這樣的註釋完全是冗餘的,因為讀者從程式碼本身就能讀到註釋裡的資訊。好的註釋應該是這樣

# 如果將帶有空格的引數傳遞到後端處理,可能會造成服務奔潰
# 因此使用strip()去掉收尾空格
input_string = input_string.strip()

註釋作為程式碼之外的說明性文字,應該儘量提供那些讀者無法從程式碼裡讀出的資訊,描述程式碼為什麼要這麼做,而不是簡單複述程式碼本身。

除了為什麼的解釋性註釋外,還有一種註釋也很常見:指引性註釋
這種註釋不復述程式碼,而是簡明扼要概括程式碼功能,起到”程式碼導讀“作用。
指引性註釋並不提供程式碼裡讀不到東西——假如沒有註釋,耐心讀完所有程式碼也能知道程式碼做了什麼。指引性註釋就是降低程式碼認知的成本,讓我們更容易理解程式碼的意圖。

指引性註釋範例

# 初始化存取服務的client物件
token = token_service.get_token()
service_client = ServiceClient(token = token)
service_client.ready()

3.弄錯介面註釋的受眾

到此這篇關於Python變數與註釋高階用法的文章就介紹到這了,更多相關Python變數與註釋內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com