Pipe-Charakter in Python

76

Ich sehe ein "Pipe" -Zeichen ( |), das in einem Funktionsaufruf verwendet wird:

res = c1.create(go, come, swim, "", startTime, endTime, "OK", ax|bx)

Was bedeutet das Rohr ax|bx?

alwbtc
quelle
Dies sollte für Sie interessant sein stackoverflow.com/questions/28252585/…
Alfredo Lozano

Antworten:

62

Es ist ein bitweises ODER von ganzen Zahlen. Wenn beispielsweise einer oder beide von axoder bxsind 1, wird dies als 1, andernfalls als ausgewertet 0. Es funktioniert auch auf anderen Zahlen, zum Beispiel 15 | 128 = 143, das heißt 00001111 | 10000000 = 10001111in binär.

AhmetB - Google
quelle
5
Python hat keine Logik oder keinen Operator.
Ignacio Vazquez-Abrams
14
@Ignacio: Python hat keine Logik oder Operator?! Wie nennt orman dann?
Jscs
2
@Ignacio beziehen Sie sich auf einen Null-Koaleszenz-Operator (wie in C # / Perl)? Ich habe noch nie davon gehört, aber wenn ich das richtig verstehe, ist das in gewisser Weise sinnvoll, da es sich um einen Kurzschlussbetreiber handelt. Ist es das, worauf Sie sich bezogen haben (verstehe ich Sie richtig)?
Zeekay
22
@zeekay: Richtig. Anstatt immer wiederkehrender Trueoder False, andund orimmer wieder zurückkehrt einen ihrer Operanden, also „Koaleszenz“ und nicht als „logisch“.
Ignacio Vazquez-Abrams
4
Was Mike gesagt hat. Im Allgemeinen wird die __or__Methode des ersten Operanden mit dem zweiten Operanden aufgerufen, sodass Sie das Verhalten für Ihre eigenen Klassen definieren können.
Denis Drescher
133

Dies ist auch der Union Set-Operator

set([1,2]) | set([2,3])

Dies führt zu set([1, 2, 3])

gui11aume
quelle
8
Dies ist wahrscheinlich viel häufiger als bitweise Operationen.
jpmc26
16

Ja, alle obigen Antworten sind korrekt.

Obwohl Sie exotischere Anwendungsfälle für "|" finden könnten, wenn es sich um einen überladenen Operator handelt, der beispielsweise von einer Klasse verwendet wird,

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

In diesem speziellen Anwendungsfall Pipe "|" Operator kann besser als Unix-Pipe-Operator gedacht werden. Ich stimme jedoch zu, dass bitweise Operatoren und Union Set-Operatoren weitaus häufigere Anwendungsfälle für "|" sind. in Python.

Tagar
quelle
10

Bitweises ODER .

Ignacio Vazquez-Abrams
quelle
4

Es ist ein bitweises oder.

Die Dokumentation für alle Operatoren in Python finden Sie auf der Seite Index - Symbole der Python-Dokumentation.

tzot
quelle