Я пытаюсь улучшить Bash to Python translator.перевод bash pre/post приращение/декремент на python
Bash позволяет ++
и --
, в то время как Python этого не делает. Многие люди предположили, что ++x
можно переписать как x += 1
. Но это игнорирует требование, один в состоянии восстановить полученное значение x
до или после того, как увеличение/уменьшение в рамках потенциально сложного выражения Баш, например:
x=$((++y + z--)).
Я не могу найти способ преобразования выше к python, потому что, похоже, python не допускает побочных эффектов, таких как присвоение в выражении. Откат будет состоять в том, чтобы написать функцию pre/post, которая приняла переменную или строку в качестве входных данных и изменила внешний элемент, переданный этой функции. Но я не могу решить, как изменить функцию переменных входных параметров.
Если я знал, что элемент, на котором работает, всегда был атомным значением, я мог бы изменить его, сопоставив его имя строки со словарем, чтобы восстановить это значение и, следовательно, изменить его. Но ++
должен работать с чем-нибудь, что может наброситься на него: eg ++y[1]
.
Есть ли способ избежать использования таких сложных выражений bash, содержащих присвоения, и разбить их на отдельные шаги python, которые создают общий расчет, выполняемый в bash, statement by statement. Это было бы довольно уродливо.
Мне просто нужно реализовать вызов по ссылке как-то в python.
Как вы говорите, вы не сможете преобразовать это в выражение Python *. Чтобы преобразовать его в код Python, вам нужно разделить его на несколько * операторов *. – BrenBarn
Поскольку многие языки допускают такие выражения, это, вероятно, было преднамеренным дизайнерским решением дизайнеров Python. Они не хотели, чтобы вы писали загадочный код. – Barmar
Существует поздняя запись (с 15 по 14 октября) на https://stackoverflow.com/questions/1485841/behaviour-of-increment-and-decrement-operators-in-python, которая имеет довольно уродливый, но полезный трюк для реализации pre- и postincrement в Python, выбирая переменную из локальной таблицы символов вызывающего абонента по имени. Если вы хотите пойти туда, вам нужно, но вряд ли вы найдете довольно прямое сопоставление. – Wintermute