函数是对象

  • Python中一切皆对象,函数也如此。可以将函数分配给变量或者存储在数据结构中。作为头等对象,函数还可以被传递给其他函数或作为其他函数的返回值。
  • 能够接收其他函数作为参数的函数称之为高阶函数。如map、reduce、filter等等。
  • 函数可以嵌套,并且可以捕获并携带父函数的一些状态。具有这种行为的函数成为闭包。
  • 对象可以被设置成可调用的,因此很多情况下可以将其作为函数对待。(类中需实现 _call__ 方法)

lambda表达式

  • lambda函数是单表达式函数,不必与名称绑定。
  • lambda函数不能使用普通的Python函数,其中总是包含一个隐式的return语句。
  • lambda与具名函数应该如何使用?是否使得程序的表述更加的清晰。

装饰器

装饰器利用了"头等函数"中的一些特性:

  • 函数是对象,可以分配给变量并传递给其他函数,以及从其他函数返回;
  • 在函数内部也能定义函数,且子函数可以捕获父函数的局部状态(闭包)。

装饰器要点:

  • 装饰器用于定义可重用的组件,可以将其应用于可调用对象以修改其行为,同时无须永久修改可调用对象本身。
  • @语法只是在输入函数上调用装饰器的简写。在单个函数上应用多个装饰器的顺序是从底部到顶部。
  • functools.wraps能将被装饰对象中的元数据转移到装饰后的对象中。
  • 不应过度使用装饰器,装饰器容易产生可怕且不可维护的代码,要注意取舍。

解包

  • *args**kwargs 用于在Python中编写变长参数的函数。
  • *args 收集额外的位置参数组成 元组**kwargs 收集额外的关键字参数组成字典。
  • 实际其作用的语法是 ***
  • * 从序列(包括 可迭代对象生成器表达式)中解包 和 ** 从字典中解包。
  • 高效使用参数解包 有助于为模块和函数编写更加灵活的接口

返回空值

  • 如果函数没有制定返回值,那么会返回None。
  • 返回空值是Python的核心功能,但是显性的return None语句能更清晰的表达代码的意图。