帶你了解python的函數(shù)名

?
函數(shù)名的本質(zhì)
函數(shù)名實(shí)質(zhì)上就是函數(shù)的內(nèi)存地址
def?wrapper():
????pass
print(wrapper)
1.引用是什么?
當(dāng)我們定義a=1的時(shí)候,系統(tǒng)會(huì)開(kāi)辟一塊內(nèi)存空間來(lái)保存1,然后用a變量名保存1所在的內(nèi)存地址引用,變量名就好像C語(yǔ)言中的指針,大家可以把引用理解成地址,a里面存的是1這個(gè)數(shù)值所在的地址,a存了1的引用。
當(dāng)我們?cè)诖a中定義了一個(gè)函數(shù),系統(tǒng)會(huì)分配一塊內(nèi)存空間,用于保存函數(shù)體的內(nèi)部變量和函數(shù)名,這個(gè)wrapper只是一個(gè)變量名,保存了函數(shù)內(nèi)存中的地址,我們可以x = wrapper,y = wrapper.這樣的操作就相當(dāng)于把wrapper中引用的地址,賦值給x,y ,這樣x和y都指向了wrapper函數(shù)所在的引用,我們可以x()和y()來(lái)調(diào)用wrapper函數(shù),調(diào)用實(shí)際上是一個(gè)函數(shù),而x,y,wrapper三個(gè)變量存了同一個(gè)函數(shù)的地址。
函數(shù)名保存的是函數(shù)的內(nèi)存地址
def?func():
????print(1)
print(func)
#<function?func?at?0x000001AFABE2C8C8>
函數(shù)名賦值給其他變量
def?func():
????print(1)
x?=?func
y?=?func
x()
y()
函數(shù)名可以當(dāng)容器類的元素
def?fun():
????print(111)
def?fun1():
????print(222)
def?fun2():
????print(333)
l1?=?[fun,fun1,fun2]
for?i?in?l1:
????i()
函數(shù)名可以當(dāng)作其他函數(shù)的參數(shù)
函數(shù)名保存的是函數(shù)在內(nèi)存中的地址,f1 = f = f()內(nèi)部的地址??-> f1()
def?f():
????print(123)
def?fun(f):
????f1?=?f
????f1()
fun(f)
函數(shù)名可以當(dāng)作其他函數(shù)的返回值
def?func():
????print(123)
def?fun(f):
????return?f
ret?=?fun(func)
ret()