有時候,方法接收的引數數目可能不一定,比如定義乙個求和的方法,至少要接收兩個引數:
def
sum(a, b):
return a + b
# 正常使用
sum(1, 2) # 3
# 但如果我想求很多數的總和,而將引數全部代入是會報錯的,而一次一次代入又太麻煩
sum(1, 2, 3, 4, 5) # sum() takes 2 positional arguments but 5 were given
對於這種接收引數數目不一定,而且不在乎引數傳入順序的函式,則應該利用位置引數*args:
def
sum(*args):
result = 0
for num in args:
result += num
return result
sum(1, 2) # 3
sum(1, 2, 3, 4, 5) # 15
# 同時,也可以直接把乙個陣列帶入,在帶入時使用 * 進行解構
sum(*[1, 2, 3, 4, 5]) # 15
但要注意的是,不定長度的引數args在傳遞給函式時,需要先轉換成元組tuple。這意味著,如果你將乙個生成器作為引數帶入到函式中,生成器將會先遍歷一遍,轉換為元組。這可能會消耗大量記憶體:
def
get_nums
():for num in range(10):
yield num
nums = get_nums()
sum(*nums) # 45
# 但在需要遍歷的數目較多時,會占用大量記憶體
# 定義乙個方法,它的作用是遍歷乙個陣列,找出等於(或不等於)目標元素的 index
defget_indexs
(array, target='', judge=true):
for index, item in enumerate(array):
if judge and item == target:
yield index
elif
not judge and item != target:
yield index
array = [1, 2, 3, 4, 1]
# 下面這些都是可行的
result = get_indexs(array, target=1, judge=true)
print(list(result)) # [0, 4]
result = get_indexs(array, 1, true)
print(list(result)) # [0, 4]
result = get_indexs(array, 1)
print(list(result)) # [0, 4]
# 定義乙個方法,它的作用是遍歷乙個陣列,找出等於(或不等於)目標元素的 index
defget_indexs
(array, *, target='', judge=true):
for index, item in enumerate(array):
if judge and item == target:
yield index
elif
not judge and item != target:
yield index
array = [1, 2, 3, 4, 1]
# 這樣可行
result = get_indexs(array, target=1, judge=true)
print(list(result)) # [0, 4]
# 也可以忽略有預設值的引數
result = get_indexs(array, target=1)
print(list(result)) # [0, 4]
# 但不指定關鍵字引數則報錯
get_indexs(array, 1, true)
# typeerror: get_indexs() takes 1 positional argument but 3 were given
# 定義乙個方法,它的作用是遍歷乙個陣列,找出等於(或不等於)目標元素的 index
# 使用 **kwargs,代表接收關鍵字引數,函式內的 kwargs 則是乙個字典,傳入的關鍵字引數作為鍵值對的形式存在
defget_indexs
(array, **kwargs):
target = kwargs.pop('target', '')
judge = kwargs.pop('judge', true)
for index, item in enumerate(array):
if judge and item == target:
yield index
elif
not judge and item != target:
yield index
array = [1, 2, 3, 4, 1]
# 這樣可行
result = get_indexs(array, target=1, judge=true)
print(list(result)) # [0, 4]
# 也可以忽略有預設值的引數
result = get_indexs(array, target=1)
print(list(result)) # [0, 4]
# 但不指定關鍵字引數則報錯
get_indexs(array, 1, true)
# typeerror: get_indexs() takes 1 positional argument but 3 were given
算是老生常談了:函式的預設值只會在程式載入模組並讀取到該函式的定義時設定一次
def
get_default
(value=):
return value
result = get_default()
result2 = get_default()
print(result) # [1, 2]
print(result2) # [1, 2]
defget_default
(value=none):
if value is
none:
return
return value
result = get_default()
result2 = get_default()
print(result) # [1]
print(result2) # [2]
python引數函式 Python函式引數總結
coding utf 8 整理一下python函式的各種引數型別 位置引數 呼叫函式時,傳入的兩個值按照位置順序依次賦給引數 def power x,n s 1 while n 0 n n 1 s s x return s print power 5,2 預設引數 簡化函式的呼叫 def power...
python 引數 Python函式 引數
python中將函式作為引數,區分將引數直接寫成函式名和函式名 的區別。def fun1 fun print print print fun 執行fun1 fun4 時,fun為函式fun3的返回值x print type fun type fun type fun fun 執行fun1 fun4 ...
python 函式的引數
位置引數 def power x,n s 1 while n 0 n n 1 s s xreturn s 以上的函式旨在於實現計算x的n次方 預設引數 def power x,n 2 s 1 while n 0 n n 1 s s x return s以上函式中,預設n 2,這樣情況下,不需要每次輸...