Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中使用的符号和竖线字符在哪里?_Python_Short Circuiting - Fatal编程技术网

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。