int a;
if ( (a = foo()) > 0)
{
printf("%d\n", a);
}
python有没有等效的声明?
答案 0 :(得分:6)
不是真的。在Python中,赋值是一个语句,而在C中它是一个表达式。 if语句中的条件必须是两种语言的表达式。
答案 1 :(得分:3)
在Python中,if条件中的赋值被禁止,因此你最终会出现语法错误,这个设计决定是为了防止这样的错误:
在C中你很容易做到:if (a = 1) {
...
}
你的意思是:
if (a == 1) {
...
}
答案 2 :(得分:1)
不,你不能做到这一点,也做得不错。这种编码风格导致复杂且难以阅读的代码。
答案 3 :(得分:1)
直到今天,我相信答案是否定的。
我认为这很不幸,所以我写了一个Python模块,我称之为let
,它允许你做这种事情。
像这样安装:
pip install let
我相信以下内容将实现您的目标:
from let import let
if let(a = foo()):
print(a)
我从您的回答中删除> 0
,假设foo
将返回0
或正整数。如果我不正确并且您确实想要检查返回值是否大于0,那么这也适用:
if let(a = foo()) > 0:
print(a)
let
也可以很好地与while
循环耦合,如果你有一个函数每次返回不同的东西,直到它最终返回False
。 IE,IBM的DB2模块要求您重复调用fetch
方法以从数据库中获取每一行。您可以使用let
来简化循环其中所有内容的逻辑:
while let(result = db.fetch_results()):
# do whatever with result here