1. 程式人生 > >Python_復習_默認參數的陷阱_24

Python_復習_默認參數的陷阱_24

結束 urn () 形參 code 數據類型 陷阱 接收 賦值

# 函數
# 可讀性強 復用性強
# def 函數名():
# 函數體
#return 返回值
# 所有的函數 只定義不調用就一定不執行
#先定義後調用

#函數名() #不接收返回值
#返回值 = 函數名() #接收返回值

#返回值
# 沒有返回值 :默認返回None
# 不寫return:函數內的代碼執行完畢自動結束
# 只寫return:結束一個函數
# return None
# 返回一個值 :結束了函數且返回一個值,可以是任意的值
# 返回多個值 : 多個值之間用逗號隔開,接收的時候可以用一個變量接收(元組),也可以用等量的多個變量接收

# def f(a):
# return ‘栗子‘
#
# ret = f(‘蘋果‘)
# print(f(‘蘋果‘))

#參數
#形參 定義函數的時候
# 位置參數 :必須傳
# *args :動態參數 可以接收任意多個按位置傳入的參數
# 默認參數 : 可以不傳 —— 陷阱
# **kwargs : 動態參數 可以接受任意多個按關鍵字傳入的參數
#實參 調用函數的時候
# 按照位置傳參數
# 按照關鍵字傳參數
# 可以混用 位置參數必須在關鍵字傳參之前
# 不能對一個參數重復賦值

# def 娃哈哈(*args):
# print(args)
#
# # 娃哈哈(1,2,3,4)
# l = [1,2,3,4]
# 娃哈哈(*l)






默認參數的陷阱

def qqxing(l = []):
    l.append(1)
    print(l)

qqxing()     #[1]
qqxing([])   #[1]
qqxing()     #[1,1]
qqxing()     #[1, 1, 1]

# 如果默認參數的值是一個可變數據類型,
# 那麽每一次調用函數的時候,
# 如果不傳值就公用這個數據類型的資源
def qqxing(l = {}): # l.append(1) l[k] = v print(l) qqxing() #{‘k‘: ‘v‘} qqxing() #{‘k‘: ‘v‘} qqxing() #{‘k‘: ‘v‘} def qqxing(k,l = {}): # l.append(1) l[k] = v print(l) qqxing(1) #{1: ‘v‘} qqxing(2) #{1: ‘v‘, 2: ‘v‘} qqxing(3) #{1: ‘v‘, 2: ‘v‘, 3: ‘v‘} def qqxing(k, l = {}): # l.append(1) l[k] = v print(l) qqxing(1) #{1: ‘v‘} qqxing(2, l={}) #{2: ‘v‘} qqxing(3) #{1: ‘v‘, 3: ‘v‘}

Python_復習_默認參數的陷阱_24