本文共 1535 字,大约阅读时间需要 5 分钟。
当默认参数的值是一个可变数据类型时,每次调用函数时,如果不传值就会共用这个数据类型的资源。这种行为可能导致不可预见的副作用,影响程序的正确性。
命名空间和作用域:
print、input、len、list 等。作用域两种:
globals() 查看。locals() 查看。global,如:a = 1def func(): global a a = 2func()print(a)
嵌套函数可以访问外部函数的局部变量,但不能修改其全局变量。例如:
def max(a, b): return a if a > b else bdef the_max(x, y, z): c = max(x, y) return max(c, z)print(the_max(1, 2, 3))
nonlocal 用于声明上层局部变量。例如:
a = 1def outer(): a = 1 def inner(): a = 2 def inner2(): nonlocal a # 声明上层局部变量 a += 1 inner2() print('##a## : ', a) inner() print('**a** : ', a)outer()print('全局 :', a) 结果:
##a## : 3**a** : 1全局 : 1
函数名本质上是函数的内存地址,可以:
def func(): print(123)f = funcprint(f)
def func(): print(123)def f2(): print('f2')l = [func, f2]print(l)for i in l: i() def f1(): print('f1')def f2(): print('f2')def f3(): print('f3')l = [f1, f2, f3]d = {'f1': f1, 'f2': f2, 'f3': f3}d['f2']() 闭包是嵌套函数,能够记住外部函数的变量。例如:
def outer(): a = 1 def inner(): print(a) inner()print(outer.__closure__)
结果:
(| ,) |
def outer(): a = 1 def inner(): print(a) return inner return innerinner = outer()inner()
通过以上内容,可以清晰理解函数命名空间、作用域、闭包等概念及其实际应用。
转载地址:http://dtafk.baihongyu.com/