Rub*_*ens 25 python ternary-operator variable-assignment user-friendly
我非常熟悉Python的三元运算符方法:
value = foo if something else bar
Run Code Online (Sandbox Code Playgroud)
我的问题很简单:没有先前的赋值,无论如何都要if ...从一个返回操作数(... if或else ...)中引用()中被评估的术语?
这里的动机是,有时我使用的表达式if ...正是我想要的三元运算结果; 虽然如此,对于小表达式,重复它没有问题,但对于更长的表达式,它有点令人讨厌.以此为例:
value = info.findNext("b") if info.findNext("b") else "Oompa Loompa"
Run Code Online (Sandbox Code Playgroud)
aba*_*ert 30
没有办法做到这一点,这是故意的.三元if只能用于琐碎的案例.
如果要使用计算结果两次,请将其放在临时变量中:
value = info.findNext("b")
value = value if value else "Oompa Loompa"
Run Code Online (Sandbox Code Playgroud)
一旦你这样做,很明显你正在做一些愚蠢的事情,实际上写这个的pythonic方式是:
value = info.findNext("b")
if not value:
value = "Oompa Loompa"
Run Code Online (Sandbox Code Playgroud)
而这实际上比原来的尝试少了 5 次击键.
如果你真的想保存击键,你可以这样做:
value = info.findNext("b") or "Oompa Loompa"
Run Code Online (Sandbox Code Playgroud)
但是,许多风格指南和BDFL都对此感到沮丧.
如果你只是这样做一次,最好更明确一点.如果你正在进行六次,那么findNext将一个可选的默认值返回而不是None像所有内置和stdlib函数一样,这是微不足道的 - 而且要好得多 - :
def findNext(self, needle, defvalue=None):
# same code as before, but instead of return None or falling off the end,
# just return defvalue.
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
value = info.findNext("b", "Oompa Loompa")
Run Code Online (Sandbox Code Playgroud)
Ign*_*ams 21
完全不要使用if ... else.相反,利用Python的合并运算符.
value = info.findNext("b") or "Oompa Loompa"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53733 次 |
| 最近记录: |