无锡新区网站建设,网站的优化与推广分析,怎么让别人做网站,app运营推广策划方案除了用户定义的函数#xff0c;调用运算符#xff08;即 ()#xff09;还可以应用到其他对象上。如果想判断对象能否调用#xff0c;可以使用内置的 callable() 函数。Python 数据模型文档列出了 7 种可调用对象。
使用 def 语句或 lambda 表达式创建内置函数#xff1a;…除了用户定义的函数调用运算符即 ()还可以应用到其他对象上。如果想判断对象能否调用可以使用内置的 callable() 函数。Python 数据模型文档列出了 7 种可调用对象。
使用 def 语句或 lambda 表达式创建内置函数使用 C 语言CPython实现的函数如 len 或 time.strftime。内置方法使用 C 语言实现的方法如 dict.get。方法在类的定义体中定义的函数。类调用类时会运行类的 __new__ 方法创建一个实例然后运行 __init__ 方法初始化实例最后把实例返回给调用方。因为 Python 没有 new 运算符所以调用类相当于调用函数。类的实例: 如果类定义了 __call__ 方法那么它的实例可以作为函数调用。生成器函数 使用 yield 关键字的函数或方法。调用生成器函数返回的是生成器对象。
用户定义的可调用类型
不仅 Python 函数是真正的对象任何 Python 对象都可以表现得像函数。为此只需实现实例方法 __call__。
import randomclass BingoCage:def __init__(self, items):# __init__ 接受任何可迭代对象在本地构建一个副本防止列表参数的意外副作用。self._items list(items)# shuffle 定能完成工作因为 self._items 是列表。random.shuffle(self._items)def pick(self): # 起主要作用的方法。try:return self._items.pop()except IndexError: # 如果 self._items 为空抛出异常并设定错误消息。raise LookupError(pick from empty BingoCage)def __call__(self): # bingo.pick() 的快捷方式是 bingo()return self.pick()if __name__ __main__:bingo BingoCage(range(3))print(bingo.pick())# 0print(bingo())# 2print(callable(bingo))# True
实现 __call__ 方法的类是创建函数类对象的简便方式此时必须在内部维护一个状态让它在调用之间可用例如 BingoCage 中的剩余元素。装饰器就是这样。装饰器必须是函数而且有时要在多次调用之间“记住”某些事 [ 例如备忘memoization即缓存消耗大的计算结果供后面使用。
创建保有内部状态的函数还有一种截然不同的方式——使用闭包