Символ трубы в 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
Другие вопросы по тегам