什麼是Pythonic?就是讓你的Python代碼看上去更簡潔、明瞭、規範。建議大家寫Python用Pycharm,它會按PEP8規範提示大家的寫法,就是代碼下面會有波浪線或問號,然後按IDE提示的方法修改即可。
既然說到規範,先說一下Python的命名規範:
文件名
小寫字母,單詞之間用_分割:test_site.py
類名
單詞首字母大寫,即駝峯式:TestSite
全局變量
大寫字母,單詞之間用_分割:TEST_SITE
普通變量/函數
小寫字母,單詞之間用_分割:test_engineer_site
get_site()
個人建議,如無特殊需求,建議大家使用Python3.8(2022.5.29)
第一,版本總歸要升上來的,用的版本越高,可用的特性也越多;第二,Python3.9目前稍微有點新,有些三方包還不支持。
下面列出一些Pythonic的例子,大家收藏並多多練習:
1.一行賦值多個變量
# 其他語言風格
test = 1
engineer = 2
site = 3
# Pythonic
test, engineer, site = 1, 2, 3
2.一行代碼交換兩個變量
# 其他語言風格
temp = test
test = engineer
engineer = temp
# Pythonic
test, engineer= engineer, test
3.拼接字符串
# 其他語言風格
alist = ["測試", "工程師", "小站"]
res = alist[0] + alist[1] + alist[2] #或是通過循環加
# Pythonic
res = ''.join(alist) # 不僅代碼少,速度還快
4.使用操作符in
# 不推薦
if word == "測試" or word == "工程師" or word == "小站":
print("在列表中")
alist = ["測試", "工程師", "小站"]
for i in range(len(alist)):
print(alist[i])
# Pythonic
if word in ["測試", "工程師", "小站"]:
print("在列表中")
if word not in ["測試", "工程師", "小站"]:
print("不在列表中")
alist = ["測試", "工程師", "小站"]
for i in alist:
print(i)
# 遍歷字典的鍵-值(key-value)
for k, v in dic.items():
print(k, v)
5.鏈式比較
# 不推薦
if age>25 and age<35:
print("苦練技術不怕互聯網公司年齡歧視")
if age1==38 and age2==38 and age3==38 and age4==38:
print("苦練技術不怕互聯網公司年齡歧視")
# Pythonic
if 25 <age <35:
print("苦練技術不怕互聯網公司年齡歧視")
if age1==age2==age3==age4==38:
print("苦練技術不怕互聯網公司年齡歧視")
6.列表去重
# Pythonic
a = [1, 2, 3, 1, 2, 3]
a = list(set(a))
7.判斷真假
# 不推薦
if a == True:
print("a爲True")
if a is True:
print("a爲True")
if len(alist) != 0:
print("alist不爲空")
if alist != []:
print("alist不爲空")
if astr != '':
print("astr不是空字符串")
# Pythonic
if a:
print("a爲True")
if not a:
print("a爲False")
if alist:
print("alist不爲空")
if astr:
print("astr不是空字符串")
if not astr:
print("astr是空字符串")
8.if else 三目運算
# 其他語言風格
if age < 18:
flag = "未成年"
else:
flag = "成年"
# Pythonic
flag = "未成年" if age < 18 else "成年" # 4行變1行
9.使用f''接拼字符串和變量
# 不推薦
a, b = "測試", "小站"
res = a + "工程師" + b
# Pythonic
a, b = "測試", "小站"
res = f"{a}工程師{b}"
10.使用enumerate遍歷列表的索引和值
# 不推薦
alist = ["測試", "工程師", "小站"]
for i in range(len(alist)):
print(f'{i}:{alist[i]}')
# Pythonic
alist = ["測試", "工程師", "小站"]
for index, word in enumerate(alist):
print(f'{index}:{word}')
11.列表推導式
# 其他語言風格
alist = [5, 2, 7, 0, 1, 8]
new_list = []
for i in alist:
if i > 4:
new_list.append(i)
# Pythonic
alist = [5, 2, 7, 0, 1, 8]
new_list = []
new_list = [i for i in alist if i > 4]
12.獲取字典元素
# 不推薦
adic = {"apple": 4, "banana": 6, "pear": 3}
apple_num = adic["apple"]
egg_num = adic["egg"] # 該句會報錯
# Pythonic
# 不推薦
adic = {"apple": 4, "banana": 6, "pear", 3}
apple_num = adic.get("apple")
egg_num = adic.get("egg", 0) # key不存在時,返回值爲指定的0
13.遍歷字典的鍵(key)
# 不推薦
adic = {"apple": 4, "banana": 6, "pear", 3}
for key in adict.keys():
print(key)
# Pythonic
adic = {"apple": 4, "banana": 6, "pear", 3}
for key in adict:
print(key)
14.解包
# 解包列表、元組
test, engineer, site = ["測試", "工程師", "小站"] # ("測試", "工程師", "小站")也支持
# 更復雜的列表解包
a, *rest = [1, 2, 3]
# 輸出:a = 1, rest = [2, 3]
a, *middle, c = [1, 2, 3, 4]
# 輸出:a = 1, middle = [2, 3], c = 4
# 函數調用對列表解包
def func(a, b, c, d):
print(a, b, c, d)
args = [1, 2, 3, 4]
func(*args)
# 輸出:1 2 3 4
# 函數調用對字典解包
# ** 會以鍵/值的形式解包一個字典
def func(a, b, c, d):
print(a, b, c, d)
kwargs = {"a": 1, "b": 2, "c": 3, "d": 4}
func(**kwargs)
# 輸出:1 2 3 4
15.使用with打開文件
# 不推薦
f = open("file.txt")
try:
data = f.read()
# ...
finally:
f.close()
# Pythonic
# 使用with最後會自動調用close()方法
with open("file.txt") as f:
data = f.read()
# ...
16.使用zip()同時處理多個列表
# 不推薦
a, b = [1,2,3], [3,4,5]
for i in range(len(a)):
print(a[i], b[i])
# Pythonic
a, b = [1,2,3], [3,4,5]
z = zip(a, b)
for x, y in z:
print(x, y)
17.any()/all()函數
# 不推薦
alist = [0,None,'',5]
for i in alist:
if i:
print('至少有一個爲真')
alist = [0,None,'',5]
flag = True
for i in alist:
if not i:
flag = False
if flag:
print('全部爲真')
# Pythonic
# any():至少有一個爲真則返回真
if any(alist):
print('至少有一個爲真')
# all():全部爲真才返回真
if all(alist):
print('全部爲真')
可以看到,使用Pythonic寫出的代碼量,是不是比其他語言風格的代碼量要少的多,這也就是爲啥Python寫起來快的原因,而且方便。
---------------------------------------------------------------------------------
關注微信公衆號即可在手機上查閱,並可接收更多測試分享~