Python中使用的符号和竖线字符在哪里?
在中,Python中使用的符号和竖线字符在哪里?,python,short-circuiting,Python,Short Circuiting,在中,&和|被列为Python中的渴望运算符。这是什么意思?在语言中何时使用 表示始终计算左操作数和右操作数&是按位AND运算符,|是按位OR运算符。&-->用于按位AND运算符,即逐位AND运算符 同样地 |-->用于按位或按位 当你发现任何python问题时,试着使用python.org,它很有帮助维基百科页面是错误的,我已经纠正了它和&不是布尔运算符,即使它们是渴望运算符,这只是意味着它们不是短路运算符。您可能知道,python和和或操作符是如何工作的: >>> def
&
和|
被列为Python中的渴望运算符。这是什么意思?在语言中何时使用 表示始终计算左操作数和右操作数&
是按位AND运算符,|
是按位OR运算符。&-->用于按位AND运算符,即逐位AND运算符
同样地
|-->用于按位或按位
当你发现任何python问题时,试着使用python.org,它很有帮助维基百科页面是错误的,我已经纠正了它
和&
不是布尔运算符,即使它们是渴望运算符,这只是意味着它们不是短路运算符。您可能知道,python和
和或
操作符是如何工作的:
>>> def talk(x):
... print "Evaluating: ", bool(x)
... return x
...
>>> talk(1 == 1) or talk(2 == 1) # 2 == 1 is not evaluated
Evaluating: True
True
>>> talk(1 == 1) and talk(2 == 1)
Evaluating: True
Evaluating: False
False
>>> talk(1 == 2) and talk(1 == 3) # 1 == 3 is not evaluated
Evaluating: False
False
据我所知,python没有急切的布尔运算符,它们必须显式编码,例如:
>>> def eager_or(a, b):
... return a or b
...
>>> eager_or(talk(1 == 1), talk(2 == 1))
Evaluating: True
Evaluating: False
True
现在,调用函数时,a
和b
会自动计算,即使或
仍然短路
至于|
和&
的用法,当与数字一起使用时,它们是二进制运算符:
>>> bin(0b11110000 & 0b10101010)
'0b10100000'
>>> bin(0b11110000 | 0b10101010)
'0b11111010'
对于使用标志的库的python绑定,您最有可能以这种方式使用|
,如wxWidgets:
>>> frame = wx.Frame(title="My Frame", style=wx.MAXIMIZE | wx.STAY_ON_TOP)
>>> bin(wx.MAXIMIZE)
'0b10000000000000'
>>> bin(wx.STAY_ON_TOP)
'0b1000000000000000'
>>> bin(wx.MAXIMIZE | wx.STAY_ON_TOP)
'0b1010000000000000'
与集合一起使用时,它们分别执行相交和并集操作:
>>> set("abcd") & set("cdef")
set(['c', 'd'])
>>> set("abcd") | set("cdef")
set(['a', 'c', 'b', 'e', 'd', 'f'])
其他答案中缺少的是
&
和|
在Python中没有任何普遍意义;它们的含义取决于操作数的类型,使用magic\uuu和
和\uuu或
方法。由于这些都是方法,操作数在作为参数传递之前都要进行求值(即没有短路)
在bool
值上,它们是逻辑“and”和逻辑“or”:
>>正确与错误
假的
>>>对|错
真的
>>>bool.\uuuuu和uuuu(真、假)
假的
>>>bool.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
真的
在int
值上,它们是按位“和”以及按位“或”:
垃圾箱(0b1100和0b1010)
“0b1000”
>>>垃圾箱(0b1100 | 0b1010)
“0b1110”
>>>垃圾箱(内部和内部(0b1100、0b1010))
“0b1000”
>>>垃圾箱(内部或内部(0b1100、0b1010))
“0b1110”
在集合上,它们是交集和并集:
>>{1,2}&{1,3}
{1}
>>> {1, 2} | {1, 3}
{1, 2, 3}
>>>集合.uuu和uuu({1,2},{1,3})
{1}
>>>集合。uuu或uuu({1,2},{1,3})
{1, 2, 3}
还有几个额外的注意事项:
以及\uuu和
方法总是在类上查找,而不是在实例上。因此,如果您分配\uuu或
,那么调用的仍然是obj.\uuu和=lambda x,y:…
obj.\uuu类和\uu.
- 类上的
和\uuu rand\uuu
方法如果已定义,将优先使用\uu ror\uuuu
有关更多详细信息,请参阅。那么,Earge是否意味着他们不像逻辑运算符那样使用短路评估?@Keoki Zee:是的。“渴望”是“渴望”的反面。@Keoki-是的,它们不会短路。如果你认为它们是像
+
或-
这样的算术运算符,而不是布尔运算符,那么你就会意识到谈论“短路”其实没有意义。@down voter:请为你的down voting写评论,这是错误的吗?这不是一个有用的评论。您是否尝试过使用关键字“&”和“|”查找文档?另外,您没有回答以下问题:“这意味着什么,什么时候在语言中使用它们?”@warvariuc,阅读文档有什么困难?转到docs.python.org,单击“常规索引”,这将为您提供“符号”、“符号”、“A”、“B”等选项。单击符号,您将在顶部附近找到“&”(当然不是“|”)。单击“&”条目,它会告诉您关于这两个方面的所有信息。如果做不到这一点,交互式提示并键入help('&')
或help('|')
以获得一个有用的运算符表。我对你投了反对票,因为我认为你没有回答“这意味着什么”的问题,但我猜主题启动者没有使用正确的词(他是否应该使用“这些”?)。我首先尝试了python.org,但找不到“|”。这是由于我自己的无知。正如我自己的经验所证明的那样,当有人发帖询问“|”是什么时,我认为有理由假设他们可能不知道如何在文档中找到“|”。“查看文档”不是答案,而是“查看文档:”是。它们也用于pandas
中,用于数据帧上的复杂查询字符串,例如df[(df['Age']>40)和(df['Weight']<100)]
@cod3monk3y我刚在NumPy中看到过这种用法,起初感到困惑,但我想没有其他简单的方法可以组合布尔数组进行索引。你完全正确,但选择了一个糟糕的例子;)Python将bool
类值视为按位运算中的整数(0==False
和1==True
都是真的),因此您的示例将使用&
和
像渴望的逻辑运算符一样工作。&
和
确实可以使用True
和False
,而且不仅仅是因为它们是0和1:例如,True | False
是True
,而不是1。