Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python如果x为y_Python_If Statement_Syntax - Fatal编程技术网

Python如果x为y

Python如果x为y,python,if-statement,syntax,Python,If Statement,Syntax,我经常发现自己在做一些愚蠢的事情,比如 if some_function(): self.value = some_function() 这使得函数执行两次。它将通过以下方式得到纠正 value = some_function(): if value: self.value = value if some_function() as value: self.value = value 如果Python允许这样的东西,那就太棒了 value = some_functi

我经常发现自己在做一些愚蠢的事情,比如

if some_function():
    self.value = some_function()
这使得函数执行两次。它将通过以下方式得到纠正

value = some_function():
if value:
    self.value = value
if some_function() as value:
    self.value = value
如果Python允许这样的东西,那就太棒了

value = some_function():
if value:
    self.value = value
if some_function() as value:
    self.value = value
节省了一些空间,而且非常清晰。我甚至会说它看起来像蟒蛇

所以,我知道这不是有效的语法,但有没有类似的构造,我不知道?这对Python软件基金会是否值得推荐?

你可以一直这样做:

>>> self.value = some_function() or self.value

Python故意不允许这样的构造,它强制将
if
条件设置为表达式,并将赋值设置为非表达式,其座右铭是“显式优于隐式”。你应该写作

value = some_function():
if value:
    self.value = value
(不过,它可以在Ruby、C、JavaScript、Java……以及任何其他以赋值为表达式的语言中使用。)

这也行


如果条件为true,则循环将执行一次,如果条件为false,则根本不会执行。

理论上

if (lambda v: globals().update({'value':v}) or v)(some_function()):
    self.value = value

在执行
if
之前,将函数返回赋值给变量的速度更快。可读性也很重要。

否则,
self.value
应该是什么?您可以这样做,例如
self.value=some_function()或None
。您想比较什么<代码>值或<代码>值和数据类型?此用例是什么?我最好奇的是,请注意,在Python中添加新语法的障碍相当高,“显式优于隐式”;对于你的最后一个问题:(1)PSF将是一个错误的建议地点;邮件列表将是一个更合适的论坛,并且(2)在您提出这样的建议之前,最好先查看python ideas档案,以了解以前的建议(有很多)。请解释如何在C中执行此操作。@user3267581:与您预期的完全一样:
if(value=some_function()){do_stuff_with(value);}
。但是,许多编译器会警告这个构造,并询问您是否真的想说
,如果(value==some_function()){…}
@user3267581:确实;C中的一个缺点是必须事先声明
值如果((value=some_function()),则更愿意编写
if)
,明确说明赋值是我们想要的,而不是用户想要的。但这不是用户想要的。根据他的例子,如果某个函数返回false-like,那么
值应该保持不变。你的例子不是这样的。@user3267581:不,
self.value
应该保持不变。
value
是一个与它无关的临时变量。除非
self.value
没有现有的值,否则在这种情况下,您会得到一个AttributeError.Right。虽然if语句的主体可能不止是一个语句,这对您的示例不起作用。但您的语句可能与我的最接近wanted@user2357112如果可能,请使用
getattr(self,“value”)
@jornsharpe:但是,
self.value
被分配了一个值
None
,而它根本不应该被分配。@user2357112如果是这样的话,请使用其他的构造之一。这很有趣。虽然阅读起来不是很直观。在创作方面做得很好甚至:
对于self.value in if_to_for(…):通过
:-)