• 函数对象、名称空间和作用域


    一、函数对象

    函数的名字就是函数对象,它在python中是第一类对象,函数名指向的是函数的内存地址。

    1.1 函数对象的作用:

    1、函数名可以被引用

    def bar():
        print('from bar')
    f=bar
    f()

    2、函数名可以当作参数传入

    def bar():
        print('from bar)
    def wrapper(func):  #func=bar
        func()
    wrapper(bar)

    3、可以当函数的返回值

    def bar():
        print('from bar')
    def foo(func):
        return func
    #print(bar)
    f = foo(bar)    #      f ---> bar
    #print(f)
    f()

    4、函数名可以作为容器类型的元素

    def get():
        print('from get')
    def put():
        print('from put')
    l = [get,put]
    #print(l)
    l[0]()

    1.2 函数对象的应用

    可以优雅地取代if分支

    二、函数嵌套

    作用:让内层函数封闭起来,不让外部直接调用

    2.1 函数的嵌套调用:

    在函数内又调用其他函数,将复杂并且小的功能,在函数内部调用,解决代码结构清晰问题

    def max1(x,y):
        if x > y:
            return x
        else:
            return y
    def max2(x,y,z):
        res1 = max1(x,y)
        res2 = max1(res1,z)
        return res2
    print(max2(11,199,2))

    2.2 函数的嵌套定义:

    例1:
    def func1():
        print('from func1')
        def func2():
            print('from func2')
        func2()
    func1()

    三、名称空间

    名称空间:存放名字与值绑定关系的地方,如果你想访问一个变量值,必须要先访问对应的名称空间

    名称空间的分类:

    内置名称空间:存放python解释器自带的名字。
    在启动python解释器时就生效,关闭就失效

    全局名称空间:文件级别(顶头写的名字)的名字。
    在执行文件时生效,在文件结束或者在文件执行期间被删除的就失效

    def func():  #func是全局的
        pass
    
    if 10>3:    
        y =333   #y 是全局的

    局部名称空间:存放函数内定义的名字(函数的参数以及函数内的名字都存放于局部内存空间)。
    在调用当前函数时临时生效,函数体代码执行结束时失效。

    加载顺序:内置名称空间 -->>全局名称空间-->>局部名称空间
    名称空间的查找顺序:局部名称空间-->>全局名称空间-->>内置名称空间

    len = 'global'
    def f1():
        # len = 1
        def f2():
            # len = 2
            print(len)
        len = 1
        f2()
    f1()

    四、作用域

    作用域:名称空间发挥作用的范围

    作用域的分类:

    1、全局作用域:包含的是内置名称空间与全局名称空间的名字
    特点: 只要程序一直执行,永久存活,若程序结束,则销毁

    2、局部作用域:包含的是局部名称空间的名字
    特点:只能在函数内使用,调用函数时生效,调用结束失效

    补充:
    1、global:声明全局变量

    def index():
        global x  #声明X是全局变量
        x=2
        print(x)
    index()
    print(x)

    2、nonlocal:在局部名称空间声明局部变量,在局部修改外部(上层函数)的变量

    def index():
        x=1
        def func():
            nonlocal x
            x=2
    
        func()
        print(x)
    index()
  • 相关阅读:
    eclipse export runnable jar(导出可执行jar包) runnable jar可以执行的
    mave常用指令
    771. Jewels and Stones珠宝数组和石头数组中的字母对应
    624. Maximum Distance in Arrays二重数组中的最大差值距离
    724. Find Pivot Index 找到中轴下标
    605. Can Place Flowers零一间隔种花
    581. Shortest Unsorted Continuous Subarray连续数组中的递增异常情况
    747. Largest Number At Least Twice of Others比所有数字都大两倍的最大数
    643. Maximum Average Subarray I 最大子数组的平均值
    414. Third Maximum Number数组中第三大的数字
  • 原文地址:https://www.cnblogs.com/wddxx/p/13666827.html
Copyright © 2020-2023  润新知