zoukankan      html  css  js  c++  java
  • 函数:(函数的名字,闭包)

    函数名本质上就是函数的内存地址

    1.可以被引用

    def func():
        print('in func')
    
    f = func
    print(f)
    
    输出:
    <function func at 0x0000029C11C93E18>

    2.可以被当作容器类型的元素

    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.可以当作函数的参数和返回值

    *不明白?那就记住一句话,就当普通变量用

    def func():
        print('in func')
        return 10
    
    def func2(arg):
        arg()
        return arg
    
    f = func2(func)
    f()
    
    输出:
    in func
    in func

    第一类对象的概念:
    函数名可以赋值
    可以作为一个数据结构的元素
    可以作为一个函数的参数
    可以作为一个函数的返回值

    闭包

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

    闭包函数:

    内部函数包含对外部作用域而非全剧作用域名字的引用,该内部函数称为闭包函数

    #函数内部定义的函数称为内部函数

    由于有了作用域的关系,我们就不能拿到函数内部的变量和函数了。如果我们就是想拿怎么办呢?返回呀!

    我们都知道函数内的变量我们要想在函数外部用,可以直接返回这个变量,那么如果我们想在函数外部调用函数内部的函数呢?

    是不是直接就把这个函数的名字返回就好了?

    这才是闭包函数最常用的用法

    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()
    
     闭包嵌套
  • 相关阅读:
    php
    php
    linux 网络管理基础 OSI ISO IOS的区别
    Linux 添加交换分区的步骤
    linux 命令
    linux命令
    linux 命令
    linux 命令
    Linux命令
    linux命令- 挂载命令 mount
  • 原文地址:https://www.cnblogs.com/biluo/p/7789131.html
Copyright © 2011-2022 走看看