簡體   English   中英

function 變量的聲明和賦值

[英]function declaration and assignment to a variable

我想問一個關於函數如何分配給變量的問題。

我是Python的初學者,學習函數。

考慮以下來自w3schools的代碼塊:

def myfunc(n):
  return lambda a : a * n

mydoubler = myfunc(2)

print(mydoubler(11))

我知道lambda是一個匿名的 function,只有一個表達式被計算並返回。

這顯示在myfunc(n)中:

return lambda a: a * n

myfunc接受一個參數,在本例中為 2,因此任何數字a都會加倍。

但是,我在這里很困惑。

在這一行中:

mydoubler = myfunc(2)

我以為我們將myfunc的結果分配給mydoubler但在 print 語句中:

print(mydoubler(11))

我們正在傳遞一個參數11 ,但我們從未在 function 聲明中的任何地方指定參數a

python 代碼如何知道打印語句中的11在這種情況下與a相關聯?

lambda創建的lambda a: a * n是一個閉包 當 function 被稱為mydoubler(11)時,它使用11作為a的值,並使用2 (計算lambda a: a * nmyfunc內的n的值)作為n的值。

mydoubler行為就好像它被定義為

def mydoubler(a):
    return a * 2

您可以通過一些挖掘看到值2存儲在 function 中:

>>> mydoubler.__closure__[0].cell_contents
2

(事實上,您可以更改它,但只有在您想讓代碼變得無可救葯地復雜時才會這樣做:

>>> mydoubler.__closure__[0].cell_contents = 3
>>> mydoubler(2)
6

)

在這種情況下,您實際上將 doubler-function 分配給了mydoubler

mydoubler = myfunc(2)

在那里您還指定了參數a ,namly 2。因此,當您將數字傳遞給mydoubler() function、Python 時,知道您已經指定了n

myfunc(2)的返回值相當於這個 lambda

lambda a: a * 2

lambda 接受 1 個參數,並將其加倍。 當您調用它時,在本例中是通過將其分配給名稱mydoubler ,您傳遞給它的任何參數都是a ,這是 lambda 接受的一個參數。

等效代碼:

mydoubler = lambda a: a * 2
output = mydoubler(11) # returns 11 * 2
print(output) # prints 22

暫無
暫無

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

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