gpt4 book ai didi

python - 将函数作为命名参数传递以进行条件检查

转载 作者:太空宇宙 更新时间:2023-11-04 03:47:29 25 4
gpt4 key购买 nike

def basket(name, colour, smell, rotten=None):
if rotten:
if rotten():
return "Can't eat!"

return ("The fruit, {}, is {} in colour"
"and smells like {}.".format(name, colour, smell))

在上面的示例代码中,如果提供了参数 rotten,则会在调用之前进行检查。它必须是一个返回 bool 值的函数(为简单起见没有参数)。它使用两行代码,我不确定这是否是此过程的传统风格。我想到的另一种方法是将当前的替换为:

def basket(name, colour, smell, rotten=lambda: None):
if rotten(): # Saved a line here
return "Can't eat!"

return ("The fruit, {}, is {} in colour"
" and smells {}.".format(name, colour, smell))

lambda方法节省一行;除此之外,我不知道哪个比另一个有优势。这样做的最佳方式是什么?是否在标准库代码中的任何地方找到它?

最佳答案

您可以像第一个示例一样保留函数签名并利用 boolean operations's short circuit behavior把它变成这样的一行:

def basket(name, colour, smell, rotten=None):
if rotten and rotten():
return "Can't eat!"

return ("The fruit, {}, is {} in colour"
"and smells like {}.".format(name, colour, smell))

如果rottenNoneand表达式会因为短路而失败而不调用rotten() .如果 rotten 不是 None,它将继续调用 rotten() 并将成功谓词为 True

注意:如评论中所述,您还可以使用函数 callable()并在实际调用之前检查 rotten 是否可以调用:

if callable(rotten) and rotten():

rotten 不是 None 但不是可调用对象(传递 rotten=True 为例子)。如果您希望函数在传递不可调用对象时大声提示,那么就让它保持原样。

关于python - 将函数作为命名参数传递以进行条件检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23018692/

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