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。我的变量并没有真正命名为 inputvar_avar_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)