gpt4 book ai didi

python - 函数式 python 编程和条件

转载 作者:太空狗 更新时间:2023-10-30 01:44:58 24 4
gpt4 key购买 nike

我正在尝试以函数式方式编写 python 函数。问题是我不知道如何将 if 条件转换为函数式。我有两个变量:AC,我想检查它们是否满足以下条件:

def function():
if(A==0): return 0
elif(C!=0): return 0
elif(A > 4): return 0
else: someOtherFunction()

我查看了 lambda shortcircuiting ,但我无法让它工作。

在此先感谢您的帮助!

最佳答案

来自link you posted :

FP either discourages or outright disallows statements, and instead works with the evaluation of expressions

所以不是 if -语句,你可以使用 conditional expression :

def function():
return (0 if ((A == 0) or (C != 0) or (A > 4)) else
someOtherFunction())

或者,(如果有许多不同的值则特别有用):

def function():
return (0 if A == 0 else
0 if C != 0 else
0 if A > 4 else
someOtherFunction())

顺便说一下,链接的文章建议

(<cond1> and func1()) or (<cond2> and func2()) or (func3())

相当于

的捷径
if <cond1>:   func1()
elif <cond2>: func2()
else: func3()

问题是它们不等价!当 <cond1> 时, bool 表达式无法返回正确的值是 Truish 但是 func1()是 Falsish(例如 False0None )。 (或者类似地,当 <cond2> 是 Truish 而 func2 是 Falsish。)

(<cond1> and func1())

是为了评估 func1() 而编写的什么时候<cond1>是 Truish,但是当 func1()是虚假的,(<cond1> and func1())评估为 False ,所以整个表达式被传递过去,Python 继续计算 (<cond2> and func2())而不是短路。

所以这里有一些有趣的历史。 2005年, Raymond Hettinger found type(z)==types.ComplexType and z.real or z 中类似的难以发现的错误什么时候z = (0+4j)因为z.real是虚假的。出于将我们从类似错误中拯救出来的愿望,使用 a less error-prone syntax 的想法(条件表达式)诞生了。

关于python - 函数式 python 编程和条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13209119/

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