函數(shù)參數(shù)是需要傳遞給函數(shù)內(nèi)部的數(shù)據(jù),在前面,我們已經(jīng)簡單接觸了函數(shù)的參數(shù),現(xiàn)在我們正式來認識它。
函數(shù)參數(shù)可以是任意的數(shù)據(jù)類型,只要函數(shù)內(nèi)部邏輯可以處理即可。
def print_param(param):
print(param)
對于print_param函數(shù),由于函數(shù)的邏輯是直接打印參數(shù),并沒有做任何別的邏輯,所以這個函數(shù)可以接受整數(shù)、浮點數(shù)、list、tuple、dict等等的數(shù)據(jù)類型。
print_param(1)
print_param('3.1415926')
print_param([1, 2, 3, 4, 5])
但是,有時候由于函數(shù)的實現(xiàn)關系,需要特定的參數(shù),就比如前面實現(xiàn)的求絕對值的函數(shù)my_abs(),如果傳遞一個字符串,就會引起錯誤。
def my_abs(x):
if x >= 0:
return x
else:
return -x
my_abs('str param')
# 報錯
TypeError: '>=' not supported between instances of 'str' and 'int'
為了保證函數(shù)的正常運行,有時候需要對函數(shù)入?yún)⑦M行類型的校驗,Python提供isinstance()函數(shù),可以判斷參數(shù)類型,它接收兩個參數(shù),第一個是需要判斷的參數(shù),第二個是類型。
isinstance(100, int) # ==> True
isinstance(100.0, int) # ==> False
isinstance('3.1415926', str) # ==> True
有了isinstance,就可以優(yōu)化my_abs函數(shù),不在里面運行出錯了。
def my_abs(x):
if not isinstance(x, int) or not isinstance(x, float):
print('param type error.')
return None
if x >= 0:
return x
else:
return -x
請實現(xiàn)函數(shù)func,當參數(shù)類型為list時,返回list中所有數(shù)字類型元素的和,當參數(shù)類型為tuple時,返回tuple中所有數(shù)字類型元素的乘積。
參考答案:
def func(param):
if isinstance(param, list):
result = 0
for item in param:
if isinstance(item, int) or isinstance(item, float):
result += item
return result
elif isinstance(param, tuple):
result = 1
for item in param:
if isinstance(item, int) or isinstance(item, float):
result *= item
return result
return None
請驗證,完成請求
由于請求次數(shù)過多,請先驗證,完成再次請求
打開微信掃碼自動綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報