Символ трубы в Python
Вижу "трубочного" персонажа (|
) используется в вызове функции:
res = c1.create(go, come, swim, "", startTime, endTime, "OK", ax|bx)
В чем смысл трубы в ax|bx
?
7 ответов
Это побитовое ИЛИ целых чисел. Например, если один или оба ax
или же bx
являются 1
это оценивает 1
иначе 0
, Это также работает на других целых числах, например 15 | 128 = 143
т.е. 00001111 | 10000000 = 10001111
в двоичном
Это также оператор множества объединения
set([1,2]) | set([2,3])
Это приведет к set([1, 2, 3])
В Python 3.9 конвейер был улучшен для слияния (объединения) словарей.
>>> d = {'spam': 1, 'eggs': 2, 'cheese': 3}
>>> e = {'cheese': 'cheddar', 'aardvark': 'Ethel'}
>>> d | e
{'spam': 1, 'eggs': 2, 'cheese': 'cheddar', 'aardvark': 'Ethel'}
>>> e | d
{'cheese': 3, 'aardvark': 'Ethel', 'spam': 1, 'eggs': 2}
Да, все ответы выше верны.
Хотя вы можете найти более экзотические варианты использования для "|", если это перегруженный оператор, используемый классом, например,
https://github.com/twitter/pycascading/wiki
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
В этом конкретном случае использования трубы "|" Оператор может быть лучше мыслить как оператор Unix Pipe. Но я согласен, побитовый оператор и оператор множественного объединения являются гораздо более распространенными вариантами использования "|" в Python.
Это побитовый или.
Документация для всех операторов в Python может быть найдена на странице Index - Symbols документации Python.
Подведение итогов и расширение предыдущих ответов:
Первоначально оператор выполняет побитовое ИЛИ . Вот учебник по побитовым операциям .
f'{0b1100 | 0b1010 :04b}' == '1110'
С другой стороны, операторы Python можно перегрузить, перегрузив эквивалентные им операторные функции . В частности, можно перегрузить, реализовав функцию__or__
(и
__ror__
) . Любая библиотека Python, стандартная или пользовательская, может перегружать любой оператор (например, заархивированный PyCascading).
Встроенные типы Python, такие какset
иперегрузка для определения объединения и слияния соответственно. В частности, Python 3.9, PEP 584, вывел перегруженные и другие операторы вdict
и другие типы стандартных библиотек.
# sets; | does union of sets
# the order does not matter, i.e., the operation is commutative
{1, 2} | {2, 3} == {1, 2, 3}
{2, 3} | {1, 2} == {1, 2, 3}
# dicts; | does "merging" of dicts
# the order does matter, i.e., the operation is NOT commutative
{'a': 1, 'b': 2} | {'b': 99, 'c': 3} == {'a': 1, 'b': 99, 'c': 3}
{'b': 99, 'c': 3} | {'a': 1, 'b': 2} == {'a': 1, 'b': 2, 'c': 3}
Недавняя популярная перегрузка и использование|
Оператор находится в библиотеке Python LangChain для цепочки/конвейера операций . Это точный код того, как LangChain перегружает оператор .
# LangChain chained sequence of components
chain = prompt | model | output_parser