gpt4 book ai didi

python - lambda *args, **kwargs : None

转载 作者:IT老高 更新时间:2023-10-28 22:22:03 32 4
gpt4 key购买 nike

考虑:

blank_fn = lambda *args, **kwargs: None

def callback(x, y, z=''):
print x, y, z

def perform_task(callback=blank_fn):
print 'doing stuff'
callback('x', 'y', z='z' )

这样做的动机是我不必输入逻辑来检查是否已分配回调,因为它默认为空白_fn,它什么都不做。

这行得通,但有什么理由我不应该这样做吗?它是pythonic吗?有更好的方法吗?是否有内置的:

lambda *args, **kwargs: None

最佳答案

根据PEP8 ,您应该“始终使用 def 语句而不是将 lambda 表达式直接绑定(bind)到名称的赋值语句。”所以,我要改变的一件事是:

def blank_fn(*args, **kwargs):
pass

不过,我认为更 Pythonic 的方式是:

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

关于python - lambda *args, **kwargs : None,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18024503/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com