函数进阶
一。函数的嵌套定义
小范围可用大范围的变量
内部函数可用外部函数的变量
# 函数的嵌套定义 执行顺序 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.可存入变量的实体

浙公网安备 33010602011771号