Python:在空字符串上更简洁 logic/syntax
Python: more concise logic/syntax on empty strings
我正在寻找一种更简洁的方式来编写 Python 中的以下内容。
给定一个输入,检查输入中是否有两个变量之一:
if (input is not None and (
(var_a == '' or (var_a != '' and var_a not in input))
or (var_b == '' or (var_b != '' and var_b not in input))
)):
# Do something...
pass
因为 '' in 'any string'
的计算结果为 True
我不能简单地测试 var_a not in input
,因此上面增加的复杂性还检查变量是否为空字符串。
希望我只是忽略了一种更简单的表达方式。
谢谢。
P.S。我的变量并没有真正命名为 input
、var_a
和 var_b
,别担心。
list = [var_a, var_b, input]
if '' in list == FALSE:
if var_a is in input or var_b is in input:
# do something
else:
#do something
if input is not None and (
not var_a or var_a not in input or # Should this be 'or' or 'and'? 'or' looks unusual here
not var_b or var_b not in input):
pass
您可以跳过 var_a != ''
的检查,因为在 var_a == '' or
之后它们将始终是 True
。检查 var_a == ''
是否等同于 not var_a
如果 var_a
不能是 None
(我猜它不可能,因为你不检查它)
编辑:
既然我想到了,您也可以从第二个括号中考虑 not
:
if input is not None and not(
var_a and var_a in input and
var_b and var_b in input):
pass
... 或超出整个表达式:
if not (input is None or
var_a and var_a in input and
var_b and var_b in input):
pass
根据定义,如果 var_a 或 var_b 不是假的,即空的,它们必须是 True,所以您只需要一次检查,而不是同时检查两个条件:
我会在 if inp is not None
:
中嵌套 any
if inp is not None:
if any((not var_a, var_a not in inp, not var_b, var_b not in inp)):
# do whatever
In [26]: var_a = ""
In [27]: var_b = ""
In [28]: inp = "foo"
In [29]: (not var_a, var_a not in inp, not var_a, var_a not in inp)
Out[29]: (True, False, True, False)
我正在寻找一种更简洁的方式来编写 Python 中的以下内容。
给定一个输入,检查输入中是否有两个变量之一:
if (input is not None and (
(var_a == '' or (var_a != '' and var_a not in input))
or (var_b == '' or (var_b != '' and var_b not in input))
)):
# Do something...
pass
因为 '' in 'any string'
的计算结果为 True
我不能简单地测试 var_a not in input
,因此上面增加的复杂性还检查变量是否为空字符串。
希望我只是忽略了一种更简单的表达方式。
谢谢。
P.S。我的变量并没有真正命名为 input
、var_a
和 var_b
,别担心。
list = [var_a, var_b, input]
if '' in list == FALSE:
if var_a is in input or var_b is in input:
# do something
else:
#do something
if input is not None and (
not var_a or var_a not in input or # Should this be 'or' or 'and'? 'or' looks unusual here
not var_b or var_b not in input):
pass
您可以跳过 var_a != ''
的检查,因为在 var_a == '' or
之后它们将始终是 True
。检查 var_a == ''
是否等同于 not var_a
如果 var_a
不能是 None
(我猜它不可能,因为你不检查它)
编辑:
既然我想到了,您也可以从第二个括号中考虑 not
:
if input is not None and not(
var_a and var_a in input and
var_b and var_b in input):
pass
... 或超出整个表达式:
if not (input is None or
var_a and var_a in input and
var_b and var_b in input):
pass
根据定义,如果 var_a 或 var_b 不是假的,即空的,它们必须是 True,所以您只需要一次检查,而不是同时检查两个条件:
我会在 if inp is not None
:
if inp is not None:
if any((not var_a, var_a not in inp, not var_b, var_b not in inp)):
# do whatever
In [26]: var_a = ""
In [27]: var_b = ""
In [28]: inp = "foo"
In [29]: (not var_a, var_a not in inp, not var_a, var_a not in inp)
Out[29]: (True, False, True, False)