本站总访问量 Python函数参数 - Jerry的小站

Jerry Gao

上帝就是真理,真理就是上帝

1
2
3
4
__defaults__ # 保存定位参数和关键字参数的默认值
__kwdefaults__ # 保存仅限关键字参数的默认值
__code__ # 参数的名称
__annotations__ # 注解存储位置

装饰器

两个特性

  • 能把被装饰的函数替换成其他函数
  • 装饰器在加载其他函数时立即执行(在被装饰的函数定义后立即执行,通常在导入时)

变量作用域规则

如果变量在函数内找不到,会从全局变量中找,如果变量在函数中被赋值,那么假定变量是局部变量

闭包

延伸了作用域的函数,包含了在函数定义体中引用、但是不在定义体中定义的非全局变量。

1
2
3
4
5
6
7
def make_averager():
... series = []
... def averager(new_value):
... series.append(new_value)
... total = sum(series)
... return total / len(series)
... return averager

series是一个自由变量,即指未在本地作用域中绑定的变量

series绑定在返回的avg函数的__closure__属性中,其里面的元素对应avg.__code__.co_freevars中的一个名称,这些元素是cell对象,有个cell_contents属性保存真正的值。

闭包是一种函数,会保留定义函数时存在的自由变量的绑定,调用函数时,虽然定义作用域不可用了,但是仍然能够使用这些绑定。

nolocal

使用nolocal变量时,会将变量标记为自由变量,即使在函数中赋值,也会变成自由变量

标准库中的装饰器

functools.lru_cache

实现了备忘功能,缓存不会无限增长,一段时间内不使用的缓存条目会被扔掉

functools.singledispatch

把Java中的方法重载带入python

评论