Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何用IF语句简化变量赋值_Python_Python 3.x - Fatal编程技术网

Python 如何用IF语句简化变量赋值

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 有效,但要求事先

我有一个简单的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
有效,但要求事先为
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