有人可以解釋python如何賦值給y
。我理解這個函數是如何工作的,但我不明白函數調用a(10)
如何賦值y
。python如何賦值給內部函數
def outside(x):
def inside(y):
return x ** y
return inside
a = outside(2)
a(10)
有人可以解釋python如何賦值給y
。我理解這個函數是如何工作的,但我不明白函數調用a(10)
如何賦值y
。python如何賦值給內部函數
def outside(x):
def inside(y):
return x ** y
return inside
a = outside(2)
a(10)
在此代碼a()
有效是inside()
一個別名,與x
固定在2
的值。
因此a(10)
本質上是inside(10)
,即值y
是10
。
由於x
是2
和y
是10
,a(10)
返回2 ** 10
(1024)。
這種類型的結構被廣泛用於Python裝飾器。我建議Understanding Python Decorators in 12 Easy Steps!作爲一個很好的介紹。除此之外它解釋了Python的功能是如何第一類對象,並可以分配給變量,其他函數的參數等通過
一步會發生什麼情況,步:
outside
功能與x = 2
。outside
返回在x
的上下文中定義的功能inside
爲2
。a
包含功能:def inside(y): return 2 ** y
a(10)
,這是回顧第3步,inside(10)
。此功能稱爲Functions as First-Class Objects - 這基本上意味着,功能就像類實例,可以保持狀態,並且可以在變量和參數傳遞,就像其他任何東西。注意下面的例子:
>>> def x():
... pass
...
>>> x
<function x at 0x02F91A30> # <-- function's address
>>> type(x)
<type 'function'>
>>>
>>> y = x
>>> type(y)
<type 'function'>
>>> y
<function x at 0x02F91A30> # <-- the same address
>>>
非常有幫助 - 謝謝 – scopa
來吧,你甚至讀過你標記過的這個重複的問題嗎? –
閱讀裝修。 – Maroun
@scopa,它是一個函數工廠,外面基本上是通過指數來提高然後使用(10)你調用內部函數,其中y被提升到x的冪。如果你打印一個.__ closure__,你會看到python創建一個閉包來引用該對象。 –