關於函式傳值為list的坑

2021-09-13 12:26:33 字數 1290 閱讀 6662

函式傳入list引數時

def f(x,li=):

for i in range(x):

print(li)

期望結果:

f(4)

#運算結果:[0, 1, 4, 9]

f(5)

#運算結果:[0, 1, 4, 9, 16]

print(『--------------------------------------』)

#運算結果

f(4)

#運算結果:[0, 1, 4, 9]

f(5)

#運算結果:[0, 1, 4, 9, 0, 1, 4, 9, 16]

通過列印列表的id進行辨識

def f(x,li=):

print('id:',id(li))

for i in range(x):

print(li)

f(4)

#id: 2154086435336

#結果:[0, 1, 4, 9]

f(5)

#id: 2154086435336

#結果:[0, 1, 4, 9, 0, 1, 4, 9, 16]

會發現id值是相同的;

說明兩次執行時使用的都是定義函式時的預設引數 li=[ ]

執行時往裡面傳新的列表
def f(x,li=):

for i in range(x):

print(li)

f(4)

#結果:[0, 1, 4, 9]

f(5,)

#結果:[0, 1, 4, 9, 16]

f(6)

#結果:[0, 1, 4, 9, 0, 1, 4, 9, 16, 25]

當傳遞空列表時,函式體當中會使用傳遞的空列表,沒有傳遞時,使用函式預設值 li=[ ], 所以會產生以上結果。

優化方案
def f(x, li=):

if not li:

# 如果li不為空的話,就往下走(清空列表); 為空就不走

li =

for i in range(x):

print(li)

f(4)

#結果:[0, 1, 4, 9]

f(5)

#結果:[0, 1, 4, 9,16]

f(6)

#結果:[0, 1, 4, 9,16,25]

關於 Activity間的傳list

問題 兩個activity直接傳值的時候出現 parcel unable to marshal value 兩個activity直接傳值需要傳乙個list於是在獲得list之後通過 i.putextra name,list 就可以了,但是有幾點需要注意 1 bean 要 implements ser...

函式的傳值

函式在我看來最主要在於函式引數的傳遞,其餘的與正常程式設計無太大差別 函式引數傳值方式 1.傳數值 2.傳位址 3.引用 引用 型別名 引用名 變數名 相當於乙個變數的別名 int n 4 int r n 在宣告變數語句中作為引用 r 4 coutcout 引用例子 void swap int a,...

關於Python函式傳參是傳值還是傳引用

事情的起因要從昨天說起,昨天寫了個函式,對傳入的df做一些計算,大概長這樣 def summary2 cal1 df df1 df.groupby agg df ctau df2 df.groupby agg df part1 pd.concat df1,df2 sort false reindex...