2022-06-01 Python 变量函数调用便捷写法
这种写法在 Python 2
和 Python 3
中都适用。
当你写一个函数,包括 callback
时,一般会这样写:
def foo(callback=None):
# ...
if callback:
callback()
某个变量指向某个 函数
或者 None
,判断是否为 None
,否则运行函数。这种写法十分常见。
有个更加简洁的写法,可以直接这样写:
def foo(callback=None):
# ...
callback and callback()
这样写可以运行的原理比较简单,就像在前面加个 if
一样,判断语句会从左到右顺序执行,当变量为 None
或者 False
时,and
就不会继续执行下去,而是直接返回 False
。
所以当 callback
为 None
时,这行代码其实已经执行结束了,根本轮不到 callback()
然后抛 TypeError: 'NoneType' object is not callable
的异常了。
2022-11-15 更新
callback and callback()
的写法看起来很酷,但遇到 callback
非 None
,也并非是函数的情况时,就还是会出现运行的问题。
实际上最上面提到的写法也不OK,最稳妥的写法就应该是 callable(callback) and callback()
。