簡體   English   中英

Python:如何傳遞對函數的引用

[英]Python: how to pass a reference to a function

如果參數是基本類型,如number,boolean,則IMO python按值傳遞

func_a(bool_value):
    bool_value = True

不會改變外面的bool_value吧?

所以我的問題是如何讓bool_value更改在外部更改生效(通過引用傳遞?

您可以使用列表來包含inout變量:

def func(container):
    container[0] = True


container = [False]
func(container)
print container[0]

按值調用/按引用引用的誤稱是一個古老的爭論。 CLU的call-by-sharing更准確地描述了Python的語義。 有關詳細信息,請參閱Fredrik Lundh的相關內容:

Python(總是),像Java(大多數)一樣通過對象引用傳遞參數(並且,在簡單賦值中,綁定名稱)。 沒有的“按值傳遞”的概念,同樣沒有的“參照變量”任何概念-只有參考 (由一些說,Python 沒有 “變數”表達這個......它的名字這與價值觀有關 - 這就是所有可能發生的事情。

可變對象可以有變異方法(其中一些看起來像運算符甚至賦值,例如ab = c實際上意味着type(a).__setattr__(a, 'b', c) ,它調用可能是變異的方法)。

但簡單的賦值給一個barename(和參數傳遞,這是完全一樣的簡單分配到barename)從來沒有任何事情做任何誘變方法。

與所涉及的類型無關,簡單的barename賦值(以及相同的參數傳遞)只會綁定或重新綁定=左側的特定名稱,從不以任何方式影響任何其他名稱或任何對象。 如果您認為類型有什么用爭論的語義傳遞(或者,相同的,簡單的分配barenames)你是非常錯誤的。

不可變類型不能,但如果您發送用戶定義的類實例,列表或字典,則可以更改它並僅保留一個對象。

像這樣:

def add1(my_list):
    my_list.append(1)

a = []
add1(a)
print a

但是,如果你執行my_list = [1],你會得到一個新實例,在函數內部丟失原始引用,這就是為什么你不能只做“my_bool = False”並希望你的變量之外的函數得到那個假

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM