是否还有其他代码形式,既可以在if语句中使用一个函数又可以获取函数的值而无需两次执行该函数?
例如
有一个fun1(arg)
函数,需要一个小时才能返回结果(结果值可以是None
或某个int)
并且仅在fun1 is not None
的结果时,我想做一些进一步的计算(例如,获取其平方值)。
这将通过以下方式完成:
result = fun1(arg)
if result:
result = result * result
是否有任何较短的形式,例如
if (result = fun1(arg)):
result = result * result
在python中?
答案 0 :(得分:4)
以代码方式可能更“干净”,有可能在C / C ++中执行第二个。据我所知,这不是用Python编写的。此外,在内存和计算方面,您给出的两个示例具有相同的完全需求。因此,使用这两者中的任何一个都完全等效。
两者是绝对相同的。所以我的答案是,使用您已经知道如何编码的第一个方法。
不要在不必要的情况下过度复杂化,这通常是一个很好的建议。
答案 1 :(得分:2)
这是python的未来版本。请参阅以下PEP
https://www.python.org/dev/peps/pep-0572/
它将被称为赋值表达式。提议的语法就像;
# Handle a matched regex
if (match := pattern.search(data)) is not None:
# Do something with match
答案 2 :(得分:0)
不,您不能这样做。在Python中,;
中的语句不能用作C中的表达式。
答案 3 :(得分:0)
您要在第二代码中尝试做的是assignment inside expressions
,这在Python中是无法完成的。
来自官方docs
请注意,在Python中,与C不同,赋值不能在表达式内部发生。 C程序员对此可能会抱怨,但是它避免了C程序遇到的常见问题:在需要==的情况下在表达式中键入=。
另请参阅:
http://effbot.org/pyfaq/why-can-t-i-use-an-assignment-in-an-expression.htm
答案 4 :(得分:0)
您编写的第二个可能解决方案是错误的,因为if语句中的'result'变量没有预先分配的值。我只会选择第一个...