使用;及;及;或;带Python字符串的运算符
我不明白这句话的意思:使用;及;及;或;带Python字符串的运算符,python,string,boolean-operations,Python,String,Boolean Operations,我不明白这句话的意思: parameter and (" " + parameter) or "" 其中,参数是字符串 通常,为什么要在python字符串中使用和和或运算符?它检查参数是否有值。如果它这样做了,它会预留一个空间。如果不是,则返回一个空字符串 $ 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
parameter and (" " + parameter) or ""
其中,参数是字符串
通常,为什么要在python字符串中使用
和和或运算符?它检查参数是否有值。如果它这样做了,它会预留一个空间。如果不是,则返回一个空字符串
$ 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'
假设您使用的是参数的值
,但如果该值为None
,则您希望使用空字符串”
,而不是None
。你一般会怎么做
if parameter:
# use parameter (well your expression using `" " + parameter` in this case
else:
# use ""
这就是那个表达式所做的。首先,您应该了解和以及或操作员的工作:
a和b
返回b
如果a为True
,否则返回a
a或b
返回a
如果a为True
,否则返回b
那么,你的表情:
parameter and (" " + parameter) or ""
这实际上相当于:
(parameter and (" " + parameter)) or ""
# A1 A2 B
# A or B
在以下情况下如何计算表达式:
参数-A1
的计算结果为True
:
result = (True and " " + parameter) or ""
result = (" " + parameter) or ""
result = " " + parameter
result = (None and " " + parameter) or ""
result = None or ""
result = ""
参数-A1
为无
:
result = (True and " " + parameter) or ""
result = (" " + parameter) or ""
result = " " + parameter
result = (None and " " + parameter) or ""
result = None or ""
result = ""
作为一般建议,使用a if C else B
form表达式作为条件表达式更好、更具可读性。因此,您应该更好地使用:
" " + parameter if parameter else ""
而不是给定的表达式。有关if-else
表达式背后的动机,请参阅。Python中的空字符串相当于False
布尔值,与空列表的方式相同。您介绍的这行代码是三元运算符的Python版本(如下面的注释所述,现在是一种过时的构造,如Python)。它基于三条规则:
- 对于
a和b
,如果a
为False
,则不会对b
进行评估
- 对于
a或b
如果a
为True
则不会对b
进行评估
- 逻辑子句的值是其最近计算的表达式的值
如果参数
的计算结果为真
则将计算和
子句的第二部分:(“”+参数)
。因此,如果参数不是空字符串,它将向该参数添加前导空格。或
子句的第二部分不会被计算,因为您已经知道整个表达式是True
(True
或任何东西总是True
)
如果参数为False
(本上下文中为空字符串),和
子句的第二部分将不会得到计算,因为您已经知道它是False
(False
,并且任何内容都始终是False
)。因此,或
子句的第二部分得到计算,返回一个空字符串
$ 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'
您可以用更详细的方式编写:
if parameter:
return " " + parameter
else:
return ""
考虑一下这个TTL。然后插入不同的场景,看看会发生什么:)
请注意,和
和或
计算为使它们“成功”或“失败”的第一个值,这不需要为真或假
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表示“真-y”和“假-y”值。此表达式链接之所以有效,是因为运算符不需要返回True或False-它将是a
或b
的值。Python认为空字符串的布尔值为“False”,而非空字符串的布尔值为“True”
所以表达式只有两种可能的结果,即空字符串和非空字符串
$ 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'
第二件要注意的事情是返回“or”和“and”操作符的哪个值。Python不会只返回true或false值,对于字符串和/或运算符,它会返回其中一个字符串(考虑它们的值为true或false)。Python使用惰性方法:
对于“and”运算符,如果左值为真,则检查并返回右值。如果left值为false,则返回该值
parameter = 'test'
print( parameter and (" " + parameter) or "" )
对于“or”运算符,如果第一个值为true,则返回该值。否则,如果第二个值为false,则返回第二个值
parameter = 'test'
print( parameter and (" " + parameter) or "" )
输出:测试
parameter = ''
print( parameter and (" " + parameter) or "" )
输出:(空字符串)有了所有好的答案,我发现这些语句可以帮助我更好地记住这一点,并适合我的大脑工作方式(希望还有更多):
- “和”返回第一个假项(例如,无),“,[],(),{},0),如果没有,则返回最后一个项(例如,未找到假项)
- “或”返回第一个真项或最后一个真项(例如,未找到真项)
总之,它们都返回决定语句结果的第一项。(在最坏的情况下,返回序列中的最后一项)
注意这个规则也适用于链式的所有“和”或“全部”或“语句”/p>正确的,但您可能需要解释它是如何工作的。它是“代码>”“+参数,如果是参数”,具有额外的晦涩。@ SMAC89:它确实有意义,但有些人会考虑这个unPythic。