[英]Assign a value of one key to another key in if statement within for loop Python
[英]Assign within if statement Python
有没有比这更简单的选择
res = returns_value_or_none(arg)
if res:
do_something_with(res)
要么
if returns_value_or_none(arg):
do_something_with(returns_value_or_none(arg))
一种将赋值和if
条件组合到一个语句中的语句?
通常,你所拥有的已经是最好的选择。
您始终可以创建一个新范围来将值绑定到变量:
(lambda res: do_something_with(res) if res else None)(returns_value_or_none(arg))
但这肯定不会更具可读性,或者更像 Pythonic。
如果你只想保存一行,你可以这样做:
res = returns_value_or_none(arg)
if res: do_something_with(res)
这有时更具可读性,但通常是净损失。
解决这个问题的另一种方法是将do_something_with
更改为接受None
并且什么都不做。 这在 Python 中并不像在 Smalltalk 或 Swift 中那么常见,但有时它确实有它的位置。
很难理解为什么使用这样的玩具示例,但是如果您调用这些函数 70 次,将检查放在函数内部的一个地方,而不是 70 个地方,它被调用的任何地方,显然是一个胜利。 (特别是因为您可能会将它放在 68 个位置而忘记了其他 2 个。)
最后但并非最不重要的一点是,在许多情况下,正确的答案是例外。 如果您通过None
您的do_something_with
可能已经提高了。 而且您肯定可以将returns_value_or_none
更改为returns_value_or_raises
。
同样,在这个玩具示例中,它看起来就像是更多的代码。 但是在现实生活中的代码中,将整个代码块放在try
/ except
通常是有意义的,并在最后一次处理所有错误。 或者甚至让异常渗透到更容易处理的更高级别。
当然,这并不适用于所有情况。 如果您期望None
是一个频繁且完全合理的响应,并且只想跳过一个步骤而不是中止整个操作链,那么检查或传递None
将比将您的代码乱扔垃圾更有意义try
块。
对于 Python 3.8+, PEP 572引入了赋值表达式
这允许使用符号NAME := expr
在表达式中分配变量。 它可以在 if 语句中使用,例如:
if (match := pattern.search(data)) is not None:
# Do something with match
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.