知识兔

函数2

24

一、函数对象

1.1 第一类对象概念

  1. 可在运行期创建
  2. 可用作函数参数或返回值
  3. 可存入变量的实体

1.2 函数对象的四大功能

  1. 引用

    def func():
        pass
    
    f = func
    print(f)
    知识兔
    <function func at 0x000002765A812E18>
  2. 当做参数传给一个函数

    def func():    print('abc')def foo(x):    x()foo(func)
    abc
  3. 当做函数的返回值

    def func():    passdef foo(x):    return xres = foo(func)print(res)
    <function func at 0x0000028A692A2E18>
  4. 当做容器类型元素

    def func():    print('abc')function_list = [func]function_list[0]()

二、名称空间和作用域

2.1名称空间

定义:内存中的储存变量名与变量间绑定关系的空间。

1. 内置名称空间

作用:存放python解释器自带的名字。

生命周期:解释器启动时生效,关闭时失效。

2. 全局名称空间

作用:除了内置和局部的名字之外,其余都存放在全局名称空间。

生命周期:文件执行时生效,文件执行结束后失效。

3. 局部名称空间

作用:存放函数调用期间函数体产生的名字。

生命周期:文件执行时函数调用期间生效,函数执行结束后失效。

4. 加载顺序

内置(程序运行前加载)>>>全局(从上到下加载)>>>局部(调用时加载)

5. 查找顺序

局部>>>全局>>>内置

x = 1def func():    print(x)x = 10func()
10

2.2 作用域

定义:作用的区域

注意:

  • 作用域关系在函数定义阶段就固定了,与函数调用无关。

  • 在局部想要修改全局的可变类型,不需要任何声明,可以直接修改。

1. 全局作用域

全局有效,全局存活,包含内置名称空间和全局名称空间。

x = 1def bar():    print(x)    bar()
1

2. 局部作用域

局部有效,临时储存,只包含局部名称空间

def f1():    def f2():        def f3():            print(x)        x = 2        f3()    f2()f1()
2

3. global和nonlocal

  • global
# 修改全局作用域中的变量x = 1def f1():    x = 2    def f2():        global x  # 修改全局        x = 3    f2()f1()print(x)
3
  • nonlocal
# 修改局部作用域中的变量x = 1def f1():    x = 2    def f2():        nonlocal x        x = 3    f2()    print(x)f1()
2

三、函数嵌套

# 求四个数中的最大值def max2(x,y):    m  = x if x>y else y    return mdef max4(a,b,c,d):    res1 = max2(a,b)    res2 = max2(res1,c)    res3 = max2(res2,d)    return res3
计算机