如果表达式变量在if块内

时间:2014-03-24 10:45:42

标签: python syntax

这是一个常见的习语:

if foo.get("bar"):
    bar = foo.get("bar")
    # DO something with bar

相反,我想说点像

if foo.get("bar") as bar:
    # DO something with bar

有没有办法在Python中说这个?

3 个答案:

答案 0 :(得分:4)

不,没有。

bar = foo.get('bar')
if bar:
   ...
del bar

答案 1 :(得分:2)

没有这样的语法,没有。对于词典,您通常使用会员资格测试:

if 'bar' in foo:
    bar = foo['bar']

这是大多数初学Python程序员认为if foo.get('bar')所做的事情,但是空值(例如{'bar': 0})在这里也是假的。

对于您确实想要跳过缺少的键空值的边缘情况,您只需使用.get()

bar = foo.get('bar')
if bar:
    #

如果你打算将值存储在局部变量中,后者可能更好,但是你要测试is not None以允许其他假值:

bar = foo.get('bar')
if bar is not None:
    #

没有必要两次调用.get(),当你已经确定'bar'密钥存在时,肯定不会。

答案 2 :(得分:1)

这有点像黑客,但这很有效。

In [17]: if [bar for bar in [foo.get('bar')] if bar]:
   ....:     print bar

无法在python3中运行