Python 使用習慣是指那些經常被使用的語法、語義和結構,這樣寫更加符合 Python 風格,看起來更像一個地道的 Pythoner.
本系列目的,分類整理 Python 使用習慣。
1. if not x
直接使用 x 和 not x 判斷 x 是否爲 None 或空
x = [1,3,5]
if x:
print('x is not empty ')
if not x:
print('x is empty')
下面寫法不夠 Pythoner
if x and len(x) > 0:
print('x is not empty ')
if x is None or len(x) == 0:
print('x is empty')
2. enumerate 枚舉
直接使用 enumerate 枚舉容器,第二個參數表示索引的起始值
x = [1, 3, 5]
for i, e in enumerate(x, 10): # 枚舉
print(i, e)
下面寫法不夠 Pythoner:
i = 0
while i < len(x):
print(i+10, x[i])
i+=1
3. in
判斷字符串是否包含某個子串,使用in
明顯更加可讀:
x = 'zen_of_python'
if 'zen' in x:
print('zen is in')
find 返回值 要與 -1 判斷,不太符合習慣:
if x.find('zen') != -1:
print('zen is in')
4 zip 打包
使用 zip 打包後結合 for 使用輸出一對,更加符合習慣:
keys = ['a', 'b', 'c']
values = [1, 3, 5]
for k, v in zip(keys, values):
print(k, v)
下面不符合 Python 習慣:
d = {}
i = 0
for k in keys:
print(k, values[i])
i += 1
5 一對 '''
打印被分爲多行的字符串,使用一對 '''
更加符合 Python 習慣:
print('''"Oh no!" He exclaimed.
"It's the blemange!"''')
下面寫法就太不 Python 風格:
print('"Oh no!" He exclaimed.\n' +
'It\'s the blemange!"')
6 交換元素
直接解包賦值,更加符合 Python 風格:
a, b = 1, 3
a, b = b, a # 交換a,b
不要再用臨時變量 tmp ,這不符合 Python 習慣:
tmp = a
a = b
b = tmp
7 join 串聯
串聯字符串,更習慣使用 join:
chars = ['P', 'y', 't', 'h', 'o', 'n']
name = ''.join(chars)
print(name)
下面不符合 Python 習慣:
name = ''
for c in chars:
name += c
print(name)
8 列表生成式
列表生成式構建高效,符合 Python 習慣:
data = [1, 2, 3, 5, 8]
result = [i * 2 for i in data if i & 1] # 奇數則乘以2
print(result) # [2, 6, 10]
下面寫法不夠 Pythoner:
results = []
for e in data:
if e & 1:
results.append(e*2)
print(results)
9 字典生成式
除了列表生成式,還有字典生成式:
keys = ['a', 'b', 'c']
values = [1, 3, 5]
d = {k: v for k, v in zip(keys, values)}
print(d)
下面寫法不太 Pythoner:
d = {}
for k, v in zip(keys, values):
d[k] = v
print(d)
10 __name__ == '__main__'
有啥用
曾幾何時,看這別人代碼這麼寫,我們也就跟着這麼用吧,其實還沒有完全弄清楚這行到底幹啥。
def mymain():
print('Doing something in module', __name__)
if __name__ == '__main__':
print('Executed from command line')
mymain()
加入上面腳本命名爲 MyModule,不管在 vscode 還是 pycharm 直接啓動,則直接打印出:
Executed from command line
Doing something in module __main__
這並不奇怪,和我們預想一樣,因爲有無這句 __main__
,都會打印出這些。
但是當我們 import MyModule
時,如果沒有這句,直接就打印出:
In [2]: import MyModule
Executed from command line
Doing something in module MyModule
只是導入就直接執行 mymain 函數,這不符合我們預期。
如果有主句,導入後符合預期:
In [6]: import MyModule
In [7]: MyModule.mymain()
Doing something in module MyModule
以上就是 10 個 Python 習慣用法,第一期。希望能幫助到你,歡迎在看哦。