10-2 函數可做爲容器、返回值等以及閉包

函數能夠做爲容器類型的元素、函數名能夠賦值

def func():
    print(111)
    # func() #函數名就是內存地址
func2 = func    #函數名賦值
func2() #結果:111

l=[func,func2]  #函數能夠做爲容器類型的元素(列表、元組、字典都是容易類型)
print(l)    #兩地址徹底同樣,結果:[<function func at 0x00628B70>, <function func at 0x00628B70>]
for i in l:
    i()

函數名能夠做爲函數的參數

def func():
    print(111)
def wahaha(f):
    f()
#函數名做爲函數的參數
wahaha(func)    #結果:111

函數名能夠做爲返回值

def func():
    print(111)
def wahaha(f):
    # f()
    return f
qqxing = wahaha(func)
qqxing()    #結果:111

閉包

  即嵌套的函數,且內部函數調用外部函數的變量

def outer():
    a=1
    def inner():
        print(a)
    print(inner.__closure__)
outer()
print(outer.__closure__)
  #結果(<cell at 0x022464D0: int object at 0x6102E310>,)
  #     None
說明:結果只要有cell說明是閉包

閉包常見的使用方法:在外部使用內部的函數

def outer():
    a=1
    def inner():
        print(a)
    return inner
inn=outer()
inn()   #結果:1
  # 說明:只要inn()存在,變量a就存在,延長了a的使用週期

閉包實例

import urllib #模塊
from urllib.request import  urlopen
def get_url():
    url = 'https://www.baidu.com/?tn=93370297_hao_pg'
    def inget():
        ret = urlopen(url).read()
        print(ret)
    return inget
get = get_url()
get()
相關文章
相關標籤/搜索