在Python字符串中使用“and”和“or”运算符

时间:2013-10-06 20:22:20

标签: python string boolean-operations

我不明白这条线的含义:

parameter and (" " + parameter) or ""

其中参数是字符串

为什么人们想要使用andor运算符,一般来说,使用python字符串?

6 个答案:

答案 0 :(得分:26)

假设您使用的是parameter的值,但如果值为None,那么您更愿意使用空字符串""而不是None 。你一般会做什么?

if parameter:
    # use parameter (well your expression using `" " + parameter` in this case
else:
    # use ""

这就是表达式正在做的事情。首先,您应该了解andor运算符的作用:

    如果a为a and b,则
  • b会返回True,否则会返回a
  • 如果a为a or b,则
  • a会返回True,否则会返回b

所以,你的表达:

parameter and (" " + parameter) or ""

实际上相当于:

(parameter and (" " + parameter)) or  ""
#    A1               A2               B
#           A                     or   B

在以下情况下如何评估表达式:

  • parameter - A1评估为True

    result = (True and " " + parameter) or ""
    
    result = (" " + parameter) or ""
    
    result = " " + parameter
    
  • parameter - A1None

    result = (None and " " + parameter) or ""
    
    result = None or ""
    
    result = ""
    

作为一般性建议,对条件表达式使用A if C else B表单表达式更好,更具可读性。所以,你应该更好地使用:

" " + parameter if parameter else ""

而不是给定的表达式。有关if-else表达式背后的动机,请参阅PEP 308 - Conditional Expression

答案 1 :(得分:6)

Python认为空字符串的布尔值为“false”,非空字符串的布尔值为“true”。

因此表达式只有两种可能的结果,即空字符串和非空字符串。

要注意的第二件事是返回“或”和“和”运算符的值。 Python不返回true或false值,对于字符串和/或运算符,它返回一个字符串(考虑它们的值为true或false)。 Python使用惰性方法:

对于“and”运算符,如果left值为true,则检查并返回正确的值。如果左值为false,则返回

对于“或”运算符,如果第一个值为true,则返回它。否则,如果第二个值为false,则返回第二个值

parameter = 'test'
print( parameter and (" " + parameter) or "" )

输出:测试

parameter = ''
print( parameter and (" " + parameter) or "" )

输出:(空字符串)

答案 2 :(得分:4)

Python中的空字符串相当于False布尔值,与空列表相同。您提供的行是三元运算符的Python版本(如下面的注释中所述,现在是一个过时的结构,如Python now has a real ternary operator)。它基于三个规则:

    {li> for a and b如果aFalse,则b将不会被评估 {li> for a or b如果aTrue,则b将不会被评估
  • 逻辑子句的值是其最近评估的表达式的值

如果parameter评估为Trueand子句的第二部分将被评估:(" " + parameter)。因此,如果它不是空字符串,它会向parameter添加前导空格。 or子句的第二部分将不会被评估,因为您已经可以告诉整个表达式是TrueTrue或任何事物总是True)。

如果parameterFalse(在此上下文中为空字符串),则and子句的第二部分将不会被评估,因为您已经知道它是{{1} }(False并且任何内容始终为False)。因此,False子句的第二部分将被评估,返回一个空字符串。

您可以用更详细的方式编写它:

or

答案 3 :(得分:2)

检查parameter是否有值。如果是这样,它会占用一个空间。如果不是,则返回空字符串。

$ python
Python 2.7.2 (default, Oct 11 2012, 20:14:37) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> foo = 'bar'
>>> foo and (" " + foo) or ""
' bar'

答案 4 :(得分:2)

考虑这个TTL。然后它只是插入不同的场景来看看会发生什么:)

请注意andor 评估为使其“成功”或“失败”的第一个值 - 这不一定是真或假!

a    b    a or b   a and b
--   --   ------   ------- 
T    T    a (T)    b (T)
T    F    a (T)    b (F)
F    T    b (T)    a (F)
F    F    b (F)    a (F)

T和F代表“Truth-y”和“False-y”值。此表达式链接起作用因为运算符不需要返回True或False - 它将是ab的值。

答案 5 :(得分:0)

有了所有好的答案,我发现这些陈述可以帮助我更好地记住这一点,并使我的大脑工作得很好(并希望在那里有更多的东西):

  • “和”返回第一个False项(例如,None,“”,[],(),{},0)或最后一项(如果没有)(例如没有找到False)

    < / LI>
  • “或”返回第一个True项目或最后一个项目(例如没有找到True)

总之,它们都返回决定语句结果的第一个项目。 (在最坏的情况下,序列中的最后一项)

请注意,此规则也适用于链接的所有“和”或所有“或”语句