1、傳遞引數一般有兩種方式:引用和傳遞值。
嚴格的定義不上了,口語表達為:
引用:子函式直接修改所在位址的值
值傳遞:將子函式的返回值複製出來並返回
舉例:使用過c++的朋友應該知道cpp中對引用傳參和值傳參的定義,如 int(a) 和 void(&a)的區別:
值傳參是將區域性函式中的值複製成乙個新的位址傳遞到主函式中,而引用傳參是將主函式的引數位址直接給到子函式,子函式在該記憶體位址上對記憶體的值直接操作,舉例如下:
如下的c++語句:
#include using namespace std;
int main()
') print(f'b=')
print(id(b),'in fuc ')
if __name__=="__main__":
b=print(id(b),'before fuction')
fuc(2,b)
print(f'b in main fuction 1: ')
print(id(b),'in main fuction 1')
fuc(3,b)
print(f'b in main fuction 2: ')
print(id(b),'in main fuction 2')
1783220742600 before fuction
a=2b=[2]
1783220742600 in fuc
b in main fuction 1: [2]
1783220742600 in main fuction 1
a=3b=[3]
1783220742600 in fuc
b in main fuction 2: [3]
1783220742600 in main fuction 2
發現b的記憶體位址在fuc 操作後仍然保持一致,即fuc中的操作是直接修改主函式中b的值
而對於符號變數,python使用的是值傳參
def fuc2(a):
print(id(a),'in fuc2')
a=3print(id(a),'in fuc2 after')
return a
if __name__=="__main__":
a=0print(id(a),'in main function')
fuc2(a)
執行結果:
1359440928 in main function
1359440928 in fuc2
1359441024 in fuc2 after
發現在 fuc2操作後,a的記憶體位址是在區域性函式fuc2中新開闢的。
a
out[28]: 0
a沒有改變。 python 函式傳參 傳參和傳引用
首先還是應該科普下函式引數傳遞機制,傳值和傳引用是什麼意思?函式引數傳遞機制問題在本質上是呼叫函式 過程 和被呼叫函式 過程 在呼叫發生時進行通訊的方法問題。基本的引數傳遞機制有兩種 值傳遞和引用傳遞。值傳遞 passl by value 過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在...
python函式的傳參
python引數傳遞採用的肯定是 傳物件引用 的方式。這種方式相當於傳值和傳引用的一種綜合。如果函式收到的是乙個可變物件 比如字典或者列表 的引用,就能修改物件的原始值 相當於通過 傳引用 來傳遞物件。如果函式收到的是乙個不可變物件 比如數字 字元或者元組 的引用,就不能直接修改原始物件 相當於通過...
Python的函式傳參
python的函式傳參不分傳值或是傳引用,它傳入的是物件的id,即物件的記憶體位址。所以可以修改這個記憶體位址上的資料,但是無法改變這個記憶體位址,即無法用新的物件來替換舊的物件 賦值不會修改傳入的引數 例子 假如有乙個函式,需要實現將傳入的list列表反轉的功能 def test nums num...