在python的if语句中赋值变量的c风格

时间:2011-06-03 15:01:48

标签: python python-3.x

在c / c ++中,我可以在if语句中“为变量赋值”,如下所示:

   int a;

   if ( (a = foo()) > 0)
   {
      printf("%d\n", a);
   }

python有没有等效的声明?

4 个答案:

答案 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