根据
PEP8 的规定,你应该“始终使用 def 语句而不是将 lambda 表达式直接绑定到名称的赋值语句。” 因此,我要更改的一件事是:
始终使用def语句代替将lambda表达式直接绑定到名称的赋值语句。
def blank_fn(*args, **kwargs):
pass
然而,我认为使用更具Python风格的方式来完成这个任务会更好:
def perform_task(callback=None):
print 'doing stuff'
if callback is not None:
callback('x', 'y', z='z')
没有必要调用一个什么也不做的函数。检查真值比调用函数更便宜。
def do_nothing(*args, **kwargs): pass
def do_something(arg, callback=do_nothing):
a = 1 + 2
callback('z', z='z')
def do_something_else(arg, callback=None):
a = 1 + 2
if callback is not None:
callback('z', z='z')
%timeit do_something(3)
1000000 loops, best of 3: 644 ns per loop
%timeit do_something_else(3)
1000000 loops, best of 3: 292 ns per loop
lambda
定义具名函数并不符合 Pythonic 风格,建议使用def
。 - Wooblef = lambda *args, **kwargs: 1234
是可行的。您可以使用f()
、f(1, 2, 3)
甚至f(1, 2, foo=bar)
来调用它,它总是返回1234。 - Basj