函數:(函數的名字,閉包)

函數名本質上就是函數的內存地址數據結構

1.能夠被引用閉包

def func():
    print('in func')

f = func
print(f)

輸出:
<function func at 0x0000029C11C93E18>

2.能夠被看成容器類型的元素app

 

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']()

輸出:
f1
f2

3.能夠看成函數的參數和返回值函數

*不明白?那就記住一句話,就當普通變量用spa

def func():
    print('in func')
    return 10

def func2(arg):
    arg()
    return arg

f = func2(func)
f()

輸出:
in func
in func

第一類對象的概念:
函數名能夠賦值
能夠做爲一個數據結構的元素
能夠做爲一個函數的參數
能夠做爲一個函數的返回值
code

 

閉包對象

def func():
    name = 'eva'
    def inner():
        print(name)

閉包函數:blog

內部函數包含對外部做用域而非全劇做用域名字的引用,該內部函數稱爲閉包函數 內存

#函數內部定義的函數稱爲內部函數作用域

 

因爲有了做用域的關係,咱們就不能拿到函數內部的變量和函數了。若是咱們就是想拿怎麼辦呢?返回呀!

咱們都知道函數內的變量咱們要想在函數外部用,能夠直接返回這個變量,那麼若是咱們想在函數外部調用函數內部的函數呢?

是否是直接就把這個函數的名字返回就行了?

這纔是閉包函數最經常使用的用法

def func():
    name = 'eva'
    def inner():
        print(name)
    return inner

f = func()
f()

輸出:
eva

判斷閉包函數的方法__closure__

 

#輸出的__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()

閉包嵌套:

def wrapper():
    money = 1000
    def func():
        name = 'eva'
        def inner():
            print(name,money)
        return inner
    return func

f = wrapper()
i = f()
i()

 閉包嵌套
相關文章
相關標籤/搜索