Python Tricks Part 5: Functions
函数是 Python 的基础模块,本篇会介绍 function application 函数定义、function application 函数应用、scoping rules 作用域规则、closures 闭包、decorators 装饰器和其他函数式编程特性。 特别关注不同的编程习惯 idioms、求值模型以及与函数相关的模式。 Default Arguments 你可以通过在函数定义处赋值的方式,给函数的参数添加默认值,例如: def split(line, delimiter=","): statements 当一个函数定义了默认参数的时候,其右侧都必须是含有默认值的可选参数。 默认函数参数会在函数首次定义的时候调用一次,这有时会导致出乎意料的行为: def func(x, items=[]): items.append(x) return items func(1) # returns [1] func(2) # returns [1, 2] func(3) # returns [1, 2, 3] 注意到每次掉都将函数默认值给修改了,要避免这种行为,使用 None 并进行检查: def func(x, items=None): if not items: items = [] items.append(x) return items 通常来说,建议只使用不可变对象作为默认参数值。 Variadic Arguments 可变参数 如果在最后一个参数前使用 asterisk 星号作为前缀,函数就可以接受可变数量的参数。 def product(first, *args): result = first for x in args: result = result *x return result product(10, 20) # 200 product(2, 3, 4, 5) # 120 在这个例子中,所有的额外参数都作为一个元组放在 args 变量中。 对于元组,你可以使用序列的标准操作处理,如迭代、切片,解包等。 Keyword Arguments 函数参考可以通过显示命名每个参数并指定值来提供函数参数。 这被称为 keyword arguments 关键字参数,例如: ...