Python學習 自定義函式內引數問題

2021-08-22 11:58:32 字數 1646 閱讀 4264

問題描述

以下函式允許計算兩個數的乘積,請稍加改造,變成可接收乙個或多個數並計算乘積:

def

product

(x, y):

return x * y

# 測試

print('product(5) =', product(5))

print('product(5, 6) =', product(5, 6))

print('product(5, 6, 7) =', product(5, 6, 7))

print('product(5, 6, 7, 9) =', product(5, 6, 7, 9))

if product(5) != 5:

print('測試失敗!')

elif product(5, 6) != 30:

print('測試失敗!')

elif product(5, 6, 7) != 210:

print('測試失敗!')

elif product(5, 6, 7, 9) != 1890:

print('測試失敗!')

else:

try:

product()

print('測試失敗!')

except typeerror:

print('測試成功!')

思路:

對於這個問題,開始想通過定義函式時傳入*a(可變引數),改為如下**

def

product

(*x):

sum=1

for y in x:

sum = sum*y

return sum

輸出結果如下:

product

(5) = 5

product

(5, 6) = 30

product

(5, 6, 7) = 210

product

(5, 6, 7, 9) = 1890

測試失敗!

資料傳入正常但是顯示測試失敗,通過檢視它的測試,發現通過傳參測試後,還有乙個檢查非空是否能夠通過的測試,空值傳入如果未報錯那麼輸出測試失敗,如果報錯那麼返回測試正常,所以需要控制傳入的引數不能為空,但是*a可變引數定義是可以是0個或者0個以上的引數傳入,所以不能只傳入乙個可變引數。

正確的情況如下:

def

product

(a,*x):

sum=a

for y in x:

sum = sum*y

return sum

先傳入乙個必選引數,那麼自定義函式傳入引數為非空的,這樣就可以控制輸出異常處理(try………..except)。

補充:在python中定義函式,可以用必選引數、預設引數、可變引數、關鍵字引數和命名關鍵字引數,這5種引數組合傳參,但是順序嚴格按照必選—預設引數—可變引數—命名關鍵字引數—關鍵字引數的順序傳入

Python學習 自定義函式

使用 def 命令建立自定義函式 以python3.4.3版本為例,自定義函式使用方法如下 下例中,return後的 括號 可有可無,但 雙引號 必須要有!本例中,return可用print 替換 def a1 return good morning,doovin 在idle互動介面呼叫 a1 函式...

Python學習(九) 自定義函式

在python中,可以建立4種函式 全域性函式 可以由建立該函式的同一模組中的任意 呼叫。區域性函式 定義在其他函式之內,只能由定義的函式呼叫。lambda函式 是表示式,可以在任何需要使用的地方定義。1.全域性函式 def functionname parameters suit paramete...

python學習筆記 自定義函式

1 函式的定義 首先,我們要定義乙個函式,以說明這個函式的功能。def square sum a,b c a 2 b 2 return c 這個函式的功能是求兩個數的平方和。首先,def,這個關鍵字通知python 我在定義乙個函式。square sum是函式名。括號中的a,b是函式的引數,是對函式...