這是一個(gè)系列文章,主要分享python的使用建議和技巧,每次分享3點(diǎn),希望你能有所收獲。
1 正確的函數(shù)返回
- 不推薦方式
def divide(a, b):
if b != 0:
return a * 1.0 / b
print divide(1, 0)
# None
print divide(0, 1)
# 0.0
- 推薦方式
def divide(a, b):
try:
return a * 1.0 / b
except ZeroDivisionError as e:
raise e
print divide(0, 1)
# 0.0
print divide(1, 0)
# ZeroDivisionError: float division by zero
前一種方式中,如果輸入的參數(shù)b為0,函數(shù)會(huì)默認(rèn)返回None,這是一個(gè)不太好的編程習(xí)慣。例如,當(dāng)把函數(shù)的返回值作為if條件判斷時(shí),0.0和None都是False,這樣容易導(dǎo)致bug。后面這種方式,將除數(shù)是0當(dāng)成異常拋出,讓調(diào)用者處理異常,是比較合理的做法。
2 正確使用函數(shù)默認(rèn)參數(shù)
- 不推薦方式
def gen_list(a=[], b=None):
a.append(b)
return a
print gen_list(b=2)
# [2]
print gen_list(b=3)
# [2, 3]
- 推薦方式
def gen_list(a=None, b=None):
if a is None:
a = []
a.append(b)
return a
print gen_list(b=2)
# [2]
print gen_list(b=3)
# [3]
前一種方式會(huì)導(dǎo)致函數(shù)默認(rèn)值改變,多次調(diào)用相互影響。正確方式是將函數(shù)默認(rèn)值設(shè)置成None,在函數(shù)內(nèi)部初始化默認(rèn)參數(shù)。這里只是針對(duì)傳遞引用類型的參數(shù),如果是數(shù)字、字符串等類型就不存在該問題。
3 利用元組傳遞多個(gè)函數(shù)參數(shù)
- 推薦方式
def demo(a, b, c, d):
print a, b, c, d
args = (1, 2, 3, 4)
demo(*args)
# 1 2 3 4
利用python的可變參數(shù)特性,可以通過元組傳遞多個(gè)參數(shù),實(shí)現(xiàn)參數(shù)的“打包式”傳遞。