跳转至

2022-06-01 Python 变量函数调用便捷写法

这种写法在 Python 2Python 3 中都适用。

当你写一个函数,包括 callback 时,一般会这样写:

def foo(callback=None):
    # ...
    if callback:
        callback()

某个变量指向某个 函数 或者 None,判断是否为 None,否则运行函数。这种写法十分常见。

有个更加简洁的写法,可以直接这样写:

def foo(callback=None):
    # ...
    callback and callback()

这样写可以运行的原理比较简单,就像在前面加个 if 一样,判断语句会从左到右顺序执行,当变量为 None 或者 False 时,and 就不会继续执行下去,而是直接返回 False

所以当 callbackNone 时,这行代码其实已经执行结束了,根本轮不到 callback() 然后抛 TypeError: 'NoneType' object is not callable 的异常了。

2022-11-15 更新

callback and callback() 的写法看起来很酷,但遇到 callbackNone,也并非是函数的情况时,就还是会出现运行的问题。

实际上最上面提到的写法也不OK,最稳妥的写法就应该是 callable(callback) and callback()