二條:Python 爲何用 # 號做註釋符?web
三條:你花了兩天時間,就給老子寫了兩行代碼?!微信
四條:一個Scrapy項目下的多個爬蟲如何同時運行?app
↑ 關注 + 星標 ,後臺回覆【大禮包】送你Python自學大禮編輯器
交流羣,速進!
函數
假設我如今使用print
大法打印了一段日誌:
工具
print('我是日誌')
我想把這段日誌註釋掉,你們會怎麼作呢?相信大多數人都是在行首加上一個#
號:flex
# print('我是日誌')
有些人可能也會用多行註釋:網站
"""
print('我是日誌')
"""
但有些人,恰恰喜歡另闢蹊徑標新立異,非要跟你們不同,他們是這樣寫的:ui
print:('我是日誌')
在print
和左括號之間,加了一個冒號。從效果上看,確實也起到了註釋的做用:url
[image:029695FF-7538-4215-8977-31A43EE9B51C-383-0000504BC19305F0/047B50A4-F251-42F3-B1D2-16EA50CD86E3.png]
爲何這樣寫也能實現註釋的效果呢?這就要從 Python 的類型標註
提及。
Python做爲一個動態語言,其自己對變量類型是沒有強制要求的,同一個變量,咱們既可讓它是int,也可讓它是字符串:
a = 1
a = 'x'
但項目規模大起來之後,這種特性可能會帶來不少難以察覺的隱患。所以,Python引入了一個新的功能,叫作類型標註
。在定義變量、函數接收參數的時候,咱們能夠指定它們的類型,若是賦值或者傳遞參數的時候類型不匹配,IDE會給你加上深色背景,提醒你這裏有問題,以下圖所示:

但類型標註這個功能是給IDE或者靜態檢查工具使用的,Python解釋器在解釋代碼的時候,會自動忽略它。因此即便你強行不遵照也沒有關係,以下圖所示:
.
有些人正是看中了Python解釋器自動忽略類型標註這個特色,動起了歪腦筋,幹起了奇技淫巧的勾當。
由於類型標註中,冒號後面的類型
,除了咱們常見的類型外,還能夠是咱們自定義的類,甚至是一個列表:
class People:
def __init__(self, name, age):
self.name = name
self.age = age
kingname = People('kingname', 28)
kingname_clone: People = kingname
kingname_god: [1, 2, 3] = kingname # 這裏,強制標註 kingname_god 變量的類型爲[1, 2, 3]。
同時,類型標註也能夠不賦值,因此這樣寫也是能夠的:
a: int
這樣一來,顯然下面這種寫法也是能夠的:
kingname_god: [1, 2, 3]
如今,咱們把列表改爲元組,因而就變成了:
kingname_god: (1, 2, 3)
如今咱們把kingname_god
改爲print
,因而咱們就獲得了:
print: (1,2, 3)
由於元組也能夠只有一個元素,因此顯然:
print:('我是日誌')
這種寫法也是合法的,它表示把 print
變量標註爲('我是日誌')
類型,但不賦值。
因爲Python 解釋器會自動忽略類型標註,因此對於這種沒有賦值的類型,Python 會自動忽略整行,因此看起來就像是被註釋了同樣。
爲了更好地證實print:('我是日誌')
本質上是一個沒有賦值的類型標註,咱們來看一下字節碼:

能夠看到,這兩種寫法,咱們一行一行對比,他們的字節碼流程徹底同樣,差異僅僅在用的類型是int
仍是'我是日誌'
,以及變量名是a
仍是print
。
除了print
外,任何咱們自定義的函數甚至是字典、列表均可以這樣寫,例如:

但我真切但願,任何一個腦殼正常的同窗都不要這樣寫。這種寫法除了炫技之外沒有任何做用。
推薦閱讀
用這個網站一查,才知道本身被賣了
特朗普要求字節跳動放棄TikTok全部權,微軟考慮收購,網友:明搶? 經過簡歷造假進了大公司以後...... 肝了6個月,《Python黑魔法指南》全新版本 v2.0 上線發佈
推薦個人微信號
來圍觀個人朋友圈,天天都有更新,坑位有限,速速掃碼添加
備註:開發方向_暱稱_城市,另送你10本Python電子書,
更多須要可進交流羣 猛戳》》交流羣,速進!
![]()
後臺回覆【大禮包】送你我整理的全套Python自學資料,不再用處處找資料了
本文分享自微信公衆號 - Python綠色通道(Python_channel)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。