1. 程式人生 > >函數名,閉包,裝飾器

函數名,閉包,裝飾器

span play 分享 技術 splay 容器類 函數的參數 spl pri

技術分享圖片
#輸出的__closure__有cell元素 :是閉包函數
def func():
    name = eva
    def inner():
        print(name)
    print(inner.__closure__)
    return inner

f = func()
f()

#輸出的__closure__為None :不是閉包函數
name = egon
def func2():
    def inner():
        print(name)
    print(inner.__closure__)
    return inner

f2 
= func2() f2()
View Code

一:函數名

1, 函數名的內存地址,print(func)
2, 函數名可以賦值給其他變量
3, 函數名可以當做容器類的元素

技術分享圖片
def f1():
     print(f1)
def f2():
     print(f2)
 def f3():
     print(f3)
 l = [f1,f2,f3]
 d = {f1:f1,f2:f2,f3:f3}
# #調用
l[0]()
d[f2]()
View Code

4, 函數名可以當做函數的參數.
5, 函數名可以當做函數的返回值.

技術分享圖片
def func2():
    
print(222) def func3(x): # print(x) # x=func2() return x f = func2 f() #func2() ret = func3(func2) # ret=func2 ret() #func2() func3(func2)() def f1(): print(f1) def func1(argv): argv() #f1() return argv f = func1(f1) f()
View Code

二:閉包

1, 內層函數,對外層函數(非全局)的變量的引用,叫做閉包。

技術分享圖片
def func():
    name = eva
    def inner():
        print(name)
    return inner

f = func()
f()
View Code

2, 閉包函數的檢測:方法__closure__

 

函數名,閉包,裝飾器