gpt4 book ai didi

python - 在 Python 中压缩 `x if x else y` 语句

转载 作者:IT老高 更新时间:2023-10-28 22:20:50 26 4
gpt4 key购买 nike

我非常熟悉 Python 的三元运算符方法:

value = foo if something else bar

我的问题很简单:在没有事先分配的情况下,是否可以从返回操作数之一 (... if else ...)?

这里的动机是有时我在 if ... 中使用表达式,这正是我希望在三元运算中得到的结果;虽然发生这种情况,对于小的表达式,重复它没有问题,但是对于更长的表达式,它会变得有些讨厌。以此为例:

value = info.findNext("b") if info.findNext("b") else "Oompa Loompa"

最佳答案

没有办法做到这一点,这是故意的。三元 if 只应该用于琐碎的情况。

如果你想使用两次计算的结果,把它放在一个临时变量中:

value = info.findNext("b")
value = value if value else "Oompa Loompa"

一旦你这样做了,很明显你在做一些愚蠢的事情,事实上,pythonic 的写法是:

value = info.findNext("b")
if not value:
value = "Oompa Loompa"

这实际上比您最初的尝试少了 5 次击键。

如果你真的想要节省击键,你可以这样做:

value = info.findNext("b") or "Oompa Loompa"

但许多风格指南和 BDFL 都不鼓励这样做。

如果您只执行一次,最好更加明确。如果你这样做了六次,那么让 findNext 采用可选的默认值来返回而不是 None 是微不足道的——而且要好得多,就像所有构建的那样-in 和 stdlib 函数:

def findNext(self, needle, defvalue=None):
# same code as before, but instead of return None or falling off the end,
# just return defvalue.

那么你可以这样做:

value = info.findNext("b", "Oompa Loompa")

关于python - 在 Python 中压缩 `x if x else y` 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14105500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com