【问题标题】:Python: more concise logic/syntax on empty stringsPython:更简洁的空字符串逻辑/语法
【发布时间】:2015-01-23 23:49:58
【问题描述】:

我正在寻找一种更简洁的方式来用 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,因此还要检查变量是否为空字符串。

希望我只是忽略了一种更简单的表达方式。

谢谢。

附:我的变量并没有真正命名为input、var_a 和var_b,别担心。

【问题讨论】:

  • 只需var_a可以代替var_a != '' "

标签: python django logic string


【解决方案1】:
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 不能是None,则检查var_a == '' 等效于not var_a(我猜它不可能,因为你不检查它)

编辑:

现在我想到了,您也可以将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

【讨论】:

    【解决方案2】:

    根据定义,如果 var_a 或 var_b 不为假,即为空,它们必须为真,因此您只需要一次检查,而不是同时检查两个条件:

    我会在 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)
    

    【讨论】:

      【解决方案3】:
      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    
      

      【讨论】:

      • 这可能会满足您的需求。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      • 2016-07-01
      • 2010-12-06
      相关资源
      最近更新 更多