Python 如何用IF语句简化变量赋值
我有一个简单的Python 3表达式:Python 如何用IF语句简化变量赋值,python,python-3.x,Python,Python 3.x,我有一个简单的Python 3表达式: if a: b = a else: print('error') 然而,在我的例子中,“a”恰好等于一个非常详细但必要的正则表达式搜索命令(此处不相关)。我是否可以简化上述代码,以便: 1) 我不需要给“a”赋值 2) 我不需要在表达式中两次声明'a'的值 谢谢 在Python 3.8中,将引入以下功能: if a := complicated_expression: b = a 建议 b = a or b 有效,但要求事先
if a:
b = a
else:
print('error')
然而,在我的例子中,“a”恰好等于一个非常详细但必要的正则表达式搜索命令(此处不相关)。我是否可以简化上述代码,以便:
1) 我不需要给“a”赋值
2) 我不需要在表达式中两次声明'a'的值
谢谢 在Python 3.8中,将引入以下功能:
if a := complicated_expression:
b = a
建议
b = a or b
有效,但要求事先为b
分配一个值。此外,如果条件仅检查a
对于具有任意条件的严格单线性,始终可以使用单例生成器技巧:
b = next((a for a in (complex_expression for _ in '_') if condition(a)), None)
但这应该被认为是纯学术性的。你可以:
b = a or False
if b:
print("okay")
else:
print("error")
其中,False
可以是您可以自行设置的任何特殊值,如果a
为False,则可以将其用作b
的默认值(前提是如果默认值更改,if
的条件也会更改)
>>重新导入
>>>
>>>def检查(rgx,s):
>>>b=重新搜索(rgx,s)或错误
>>>如果b:
>>>打印(“好”)
>>>返回b
>>>其他:
>>>打印(“错误”)
>>>
>>>选中(“\W”,“你好,世界!”)
可以
>>>选中(“\d”,“你好,世界!”)
错误
我认为b=a或b
。但我会将结果分配给一个临时变量。但即使如此,您也在分配给一个临时变量:只保存一行。@RemcoGerlich这是真的,但前提是这一行是OP想要保存的。谢谢这个-很好的答案,但不幸的是目前无法使用。我认为它应该是“或b”,要保留原来的b值,@RemcoGerlich不会为RHS中的b
提出namererror
?这个答案对于我的原始问题来说非常好,但我忘了提到我想将其保留为“if语句”格式,以便我可以使用“else”功能来提出错误。对不起,我做了一个错误的决定edit@freddieaj在这种情况下,您可以将if
与b
一起使用@MrGeek谢谢!
>>> import re
>>>
>>> def check(rgx, s):
>>> b = re.search(rgx, s) or False
>>> if b:
>>> print("okay")
>>> return b
>>> else:
>>> print("error")
>>>
>>> check('\W', 'Hello, world!')
okay
<re.Match object; span=(5, 6), match=','>
>>> check('\d', 'Hello, world!')
error