python 函式傳參筆記

2021-08-19 08:07:15 字數 1712 閱讀 6098

def test(a=):

return a

print test()

print test()

print test()

返回的結果:

['a']

['a', 'a']

['a', 'a', 'a']

原因:傳入的引數是乙個空的列表,python遇到函式的時候會把函式讀到記憶體中,預設引數會被建立。雖然函式沒有執行,但是其中賦值建立變數,並且建立好了。a始終沒有改變,指向的記憶體方向都是同乙個記憶體。

使用id()可以檢視函式內部在記憶體中的位址。

def test(a=):

print id(a)

return a

print test()

print test()

print test()

返回結果:

53854536

['a']

53854536

['a', 'a']

53854536

['a', 'a', 'a']

可以看到指向記憶體的位置都沒變。

這裡引申一下python的可變物件和不可變物件,dict,list是可變物件,str,int,tuple,float是不可變物件。意思就是可變物件的值改變後對應的記憶體位址沒改變。但是不可變物件改變量值後,就會創立乙個新的物件並且占用新的記憶體空間。所以一般如果想要把乙個列表的所有元素拼接成乙個字串的話,遍歷這個列表沒然後使用」.join()方法,節省記憶體。

如果想要每次都是變成空的列表可以這樣寫。

def test_new(a=none):

if a is none:

a=print id(a)

return a

print test_new()

print test_new()

print test_new()

51934344

['a']

51934344

['a']

51934344

['a']

python的動態引數有*args與**kwargs。 *args表示任何多個無名引數,它是乙個tuple。**kwargs表示關鍵字引數,它是乙個dict。

def fun(*args):

for x in args:

print x

fun(1,2,3)

返回結果:

1

23

當然還可以傳入列表,但是傳入列表的時候必須要在前面加上*號。比如:

li=[1,2,3,4,5]

fun(*li)

返回結果:

123

45

def fun_test(**kwargs):

for x in kwargs:

print x,kwargs[x]

fun_test(k1=1,k2=[1,2,3])

返回結果:

k2 [1, 2, 3]

k1 1

當然還可以傳入字典,使用方法和上面一致,也是加上兩個*號。

python 函式傳參 傳參和傳引用

首先還是應該科普下函式引數傳遞機制,傳值和傳引用是什麼意思?函式引數傳遞機制問題在本質上是呼叫函式 過程 和被呼叫函式 過程 在呼叫發生時進行通訊的方法問題。基本的引數傳遞機制有兩種 值傳遞和引用傳遞。值傳遞 passl by value 過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在...

Python函式傳參

首先還是應該科普下函式引數傳遞機制,傳值和傳引用是什麼意思?函式引數傳遞機制問題在本質上是呼叫函式 過程 和被呼叫函式 過程 在呼叫發生時進行通訊的方法問題。基本的引數傳遞機制有兩種 值傳遞和引用傳遞。值傳遞 passl by value 過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在...

python 函式傳參

函式的好處 1.保持一致性 2.可重用 3.可擴充套件 函式的返回值 1.空,返回none 2.有乙個物件,返回當前物件 3.有多個物件,返回元組 tuple import time 定義函式,列印日誌時間 deflogger time format y m d x time current tim...