Python函數(shù)通過(guò)引用調(diào)用在某些語(yǔ)言中,您可以使用特殊的保留字(如ref或val)通過(guò)引用或值傳遞參數(shù)。當(dāng)您將參數(shù)傳遞給Python函數(shù)時(shí),它永遠(yuǎn)不會(huì)在離開(kāi)函數(shù)時(shí)改變參數(shù)的值。唯一的方法是使用全局保留字(或者我當(dāng)前理解它)。例1:k = 2def foo (n):
n = n * n #clarity regarding comment below
square = n
return squarej = foo(k)print jprint k會(huì)表現(xiàn)出來(lái)>>4>>2顯示k是不變的在此示例中,變量n永遠(yuǎn)不會(huì)更改例2:n = 0def foo():
global n
n = n * n
return n在此示例中,變量n已更改在Python中是否有任何方法可以調(diào)用函數(shù)并告訴Python 參數(shù)是值還是引用參數(shù)而不是使用全局?其次,在A級(jí)劍橋考試,他們現(xiàn)在說(shuō)一個(gè)函數(shù)返回一個(gè)單一而過(guò)程返回值超過(guò)一個(gè)值。在80年代,我被教導(dǎo)了一個(gè)函數(shù)有一個(gè)返回語(yǔ)句,而程序沒(méi)有。為什么現(xiàn)在不正確?
3 回答

慕田峪4524236
TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
你不能通過(guò)Python中的引用傳遞一個(gè)簡(jiǎn)單的原語(yǔ),但是你可以做以下事情:
def foo(y): y[0] = y[0]**2x = [5]foo(x)print x[0] # prints 25
然而,這是一種奇怪的方式。請(qǐng)注意,在Python中,您還可以返回多個(gè)值,使得一些用于傳遞引用的用例不那么重要:
def foo(x, y): return x**2, y**2a = 1b = 2a, b = foo(a, b) # a == 2; b == 4
當(dāng)您返回這樣的值時(shí),它們將作為元組返回,而元組又被解壓縮。
編輯: 另一種思考方式是,雖然您無(wú)法通過(guò)Python中的引用顯式傳遞變量,但您可以修改傳入的對(duì)象的屬性。在我的示例(和其他)中,您可以修改列表的成員但是,你不能完全重新分配傳入的變量。例如,看到以下兩段代碼看起來(lái)可能會(huì)做類(lèi)似的事情,但結(jié)果會(huì)有不同的結(jié)果:
def clear_a(x): x = []def clear_b(x): while x: x.pop()z = [1,2,3]clear_a(z) # z will not be changedclear_b(z) # z will be emptied
添加回答
舉報(bào)
0/150
提交
取消