1. 程式人生 > >Python學習筆記(持續更新)

Python學習筆記(持續更新)

一. 定義函式時,預設引數的問題

1. 預設引數值為不可變物件(例如常量)時:

i = 5

def f(arg=i):
    print(arg)

i = 6
f()

得到的結果將會是輸出5.

2.預設引數為可變物件(例如列表、字典或類)時:

def f(a, L=[]):
    L.append(a)
return L

print(f(1))
print(f(2))
print(f(3))

這種情況下,輸出的結果為:

[1]
[1, 2]
[1, 2, 3]

在python中預設值在函式定義作用域被解析,在程式碼執行前需要編譯,繫結具體的結果,給這個方法靜態分配儲存空間(引數也要分配儲存空間,而且預設引數的儲存空間是不變的)。

如果不想讓預設值在後續呼叫中累積,可以採用如下方法定義函式:

def f(a, L=None):
if L is None:
    L = []
L.append(a)
return L