python的傳參特性

2021-09-02 18:11:15 字數 1458 閱讀 6770

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...