python 入參函式 Python 函式傳參

2021-10-16 23:50:31 字數 1512 閱讀 7293

這個世界其實從不曾有乙個人能取代另乙個人的位置,所謂的取代,只是以前的那個人被遺忘了。

普通傳參的小坑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()

返回結果:

['a']

['a', 'a']

['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()

記住,對應的記憶體位址任然是一樣的。

返回結果:

['a']

['a']

['a']

動態引數

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

*args的用法def fun(*args):

for x in args:

print x

fun(1,2,3)

返回結果:

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

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

fun(*li)

返回結果:

**kwargs的用法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

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

dubbo 攔截入參

建立 dubbo 的filter com.alibaba.dubbo.rpc.filter import com.alibaba.dubbo.common.constants import com.alibaba.dubbo.common.extension.activate import com....

springMvc 入參物件

1.修改或者新增物件 2.多添件查詢時候也會遇到 springmvc能夠根據屬性自動的封裝pojo的物件並且支援關聯的物件 大致的原理是在傳入後台的時候把前台的屬性和物件封裝成json的形式傳入後台,後台根據傳入的物件,把json的形式轉換為物件進行處理 具體使用 package com.atgui...

Python函式傳參

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