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

  

 
原文地址:https://www.cnblogs.com/Cheryol/p/9736458.html