Python中的管道字符

alw*_*btc 64 python pipe bitwise-operators

|在函数调用中看到一个"管道"字符():

res = c1.create(go, come, swim, "", startTime, endTime, "OK", ax|bx)
Run Code Online (Sandbox Code Playgroud)

管道的含义是什么ax|bx

gui*_*ume 107

这也是联合集合运算符

set([1,2]) | set([2,3])
Run Code Online (Sandbox Code Playgroud)

这将导致 set([1, 2, 3])

  • 与按位运算相比,这可能*更*常见。 (3认同)

Ahm*_*gle 56

它是整数的按位OR.例如,如果一个或两个axbx1,这个计算结果为1,否则到0.这也适用于其他的整数,例如15 | 128 = 143,即00001111 | 10000000 = 10001111二进制.

  • @zeekay:正确.而不是总是返回"True"或"False","和"和"或"总是返回其中一个操作数,因此"合并"而不是"逻辑". (20认同)
  • @Ignacio:Python没有逻辑或运算符?!你怎么称呼[`或`](http://docs.python.org/reference/expressions.html#boolean-operations)呢? (9认同)
  • Python没有逻辑或运算符. (5认同)
  • 迈克说的话.更一般地说,它使用第二个操作数调用第一个操作数的`__or__`方法,因此您可以为自己的类定义其行为. (3认同)
  • `5 = 101`、`7 = 111`、`101 | 111 = 111 = 7` (2认同)
  • @Ignacio你是指它作为一个空的合并运算符(就像在C#/ Perl中一样)?从来没有听说过这种方式,但如果我理解正确的话,那确实是有道理的,因为它是一个短路操作员.这是你所指的(我理解你的正确)吗? (2认同)

小智 35

Python 3.9 - PEP 584 - Add Union Operators To dict标题为规范的部分中,对运算符进行了解释。管道被增强以合并(联合)字典。

>>> d = {'spam': 1, 'eggs': 2, 'cheese': 3}
>>> e = {'cheese': 4, 'nut': 5}
>>> d | e
{'spam': 1, 'eggs': 2, 'cheese': 4, 'nut': 5} # comment 1
>>> e | d
{'cheese': 3, 'nut': 5, 'spam': 1, 'eggs': 2} # comment 2
Run Code Online (Sandbox Code Playgroud)

评论 1如果一个键同时出现在两个操作数中,则最后看到的值(即来自右侧操作数的值)获胜 --> 'cheese': 4 而不是 'cheese': 3

comment 2奶酪出现两次,因此选择第二个值d[cheese]=3


Tag*_*gar 10

是的,上面的所有答案都是正确的.

虽然你可以找到更多的"|"异常用例,但是如果它是一个类使用的重载运算符,例如,

https://github.com/twitter/pycascading/wiki#pycascading

input = flow.source(Hfs(TextLine(), 'input_file.txt'))
output = flow.sink(Hfs(TextDelimited(), 'output_folder'))

input | map_replace(split_words, 'word') | group_by('word', native.count()) | output
Run Code Online (Sandbox Code Playgroud)

在这个特定的用例管道"|" 运算符可以更好地被认为是unix管道运算符.但我同意,逐位运算符和联合集运算符是更常见的"|"用例 在Python中.


tzo*_*zot 8

它是按位或。

Python 中所有运算符的文档可以在Python 文档的索引 - 符号页面中找到。