Python 函式的引數

2021-07-31 05:43:47 字數 3399 閱讀 2548

有時候,方法接收的引數數目可能不一定,比如定義乙個求和的方法,至少要接收兩個引數:

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,這樣情況下,不需要每次輸...