函数进阶

一。函数的嵌套定义

小范围可用大范围的变量

内部函数可用外部函数的变量

# 函数的嵌套定义
                                 执行顺序
def outer():                      2
    a = 1
    def inner():             4
        print(a)             6
        print('inner')         5
    inner()                3
outer()                  1
a = 1
def outer():
    a = 1
    def inner():
        b = 2
        print(a)
        print('inner')
        def inner2():
            nonlocal a   # 声明了一个上层局部变量
            a += 1    # 不可变数据类型的修改
            print('inner2')
        inner2()
    inner()
    print("局部:", a)


outer()
print('全局:', a)


#
1
inner
inner2
局部: 2
全局: 1



# nonlocal  只能作用于局部变量,找上层中里离当前函数最近一层的局部变量
# 声明了nonlocal的内部函数的变量修改会影响到离当前函数最近一层的局部变量
# 对全局无效
# 对局部也只是对最近的一层有影响

二。函数名

1.函数名就是内存地址

2.函数名可以赋值

3.函数名可以作为容器类型数据的元素

def func():
    print(123)
# func()   # 函数名就是内存地址;
func2 = func   #函数名可以赋值
func2()

l = [func, func2]   #函数名可以作为容器类型数据的元素
print(l)

#
123
[<function func at 0x00B51978>, <function func at 0x00B51978>]

4.函数名可以作为函数的参数

5.函数名可以作为函数的返回值

def func():
    print(123)


def wahaha(f):
    f()
    return f            # 函数名可以作为函数的返回值


qqxing = wahaha(func)     # 函数名可以作为函数的参数
qqxing()

#
123
123

 

6.函数名为第一类对象

第一类对象:

1.可在运行期创建

2.可用作函数参数或返回值

3.可存入变量的实体

posted @ 2018-08-08 00:56  albatorss  阅读(102)  评论(0)    收藏  举报