Префикс Python Постфиксный инфикс, без скобок - PullRequest
0 голосов
/ 20 октября 2018

Я пришел на Python из Mathematica.Существуют ли префиксные, постфиксные и инфиксные операторы без скобок, как в Mathematica в Python?

Например, в Mathematica

Print@@string
string~Join~string
data//Sum

я обнаружил, что постоянно использую печать для проверки функций и необходимости переноситьвсе это с круглыми скобками кажется громоздким, а очистка медленной.Есть ли способ получить [i for i in data]//Print в Python3?

1 Ответ

0 голосов
/ 20 октября 2018

Python не имеет никаких постфиксных операторов, хотя вы можете сортировать их, используя магические методы r-dunder и инфиксные операторы, если вы действительно стараетесь.

Например,

class PrintType:
    def __rfloordiv__(self, other):
        print(other)

Print = PrintType()

[1, 2, 3]//Print

Возможно, вам все равно потребуются скобки, чтобы получить правильный приоритет.

В Python есть таблица приоритетов операторов в документации.Таким образом, операции с более высоким приоритетом будут применяться первыми и не требуют явных скобок, например, 10 + 2 * 3 - это то же самое, что 10 + (2 * 3) в Python.

Вы можете даже обобщить это на произвольные функции с 1 аргументом,

class Slash2:
    def __init__(self, fn):
        self.fn = fn

    def __rfloordiv__(self, other):
        return self.fn(other)

Print = Slash2(print)
Sum = Slash2(sum)

[1, 2, 3]//Sum//Print
# prints "6"
[1, 2, 3]//Slash2(sum)//Slash2(print)  # Same thing.

Если вы привыкли к Mathematica, я бы порекомендовал использовать тетради Jupyter для ваших экспериментов на Python, так как парадигма ячеек вам знакома.

Jupyter'sЯдро Python, IPython , имеет магию %, которая несколько расширяет собственный синтаксис Python.IPython включает опцию % autocall для вызова функций без скобок.Это может вызвать неоднозначность в некоторых случаях и поэтому отключено по умолчанию.

Вы также можете начать строку с / для аналогичного эффекта (это работает только в IPython - см. Также, и ; для автоматического вызова с автоматическими кавычками).

Как и в IPlthon repl, значение последнего оператора в ячейке Jupyter будет автоматически отображаться как выходной - у вас нетпозвонить print на это.А для некоторых типов данных, таких как фреймы данных Pandas, лучше, если вы этого не сделаете.Также возможно настроить его так, чтобы он отображал вывод нескольких операторов из одной и той же ячейки.

Первая ячейка, которую вы должны попытаться выполнить в Jupyter, - это

?

Просто знак вопроса.Это вызовет интерактивную справку, объясняющую функции IPython.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...