網站首頁 編程語言 正文
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.弄錯接口注釋的受眾
原文鏈接:https://blog.csdn.net/m0_38039437/article/details/126182699
相關推薦
- 2023-01-30 PyQt中使用QProcess運行一個進程的示例代碼_python
- 2023-07-07 sklearn.model_selection模塊介紹
- 2022-05-28 使用pandas計算環比和同比的方法實例_python
- 2022-08-05 淺析C++元組tuple類型_C 語言
- 2022-03-30 C語言入門之淺談數據類型和變量常量_C 語言
- 2022-10-25 Python中random函數的用法整理大全_python
- 2022-09-15 C#中DateTime的時間加減法操作小結_C#教程
- 2022-07-07 詳解Git?的?rebase?命令使用方法_相關技巧
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支