zoukankan      html  css  js  c++  java
  • 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()
    

      

     
  • 相关阅读:
    转载:C#中的属性、和字段的区别
    在idea中创建一个maven web工程及解决工程创建过慢问题
    注解&动态代理
    Listener&Filter
    Ajax&jQuery
    JSP&EL&JSTL
    Cookie&Session
    HttpServletRequest&HttpServletResponse
    Http协议&Servlet
    XML
  • 原文地址:https://www.cnblogs.com/Cheryol/p/9736458.html
Copyright © 2011-2022 走看看