【发布时间】:2015-02-14 00:19:00
【问题描述】:
我正在尝试改进Bash to Python translator。
Bash 允许 ++ 和 --,而 Python 不允许。很多人建议++x可以改写为x += 1。但这忽略了作为潜在复杂 bash 表达式的一部分,在递增/递减之前或之后能够恢复 x 的结果值的要求,例如:
x=$(( ++y + z--)).
我找不到将上述内容转换为 python 表达式的方法,因为似乎 python 不允许在表达式中进行赋值等副作用。一个后备方案是编写一个 pre/post 函数,该函数将变量或字符串作为输入,并更改其外部项目以传递给函数。但我不知道如何让函数更改其输入参数变量。
如果我知道被操作的项目总是一个原子值,我可以通过将它的字符串名称映射到字典来改变它,以恢复这个值并修改它。但是++ 必须处理 bash 可能抛出的任何问题:例如++y[1]。
有没有什么办法可以避免使用这种包含赋值的复杂 bash 表达式,并将它们分解为单独的 python 步骤,这些步骤在 bash 中逐语句构建整体计算。这会很丑陋。
我只需要在python中以某种方式实现引用调用。
【问题讨论】:
-
如您所说,您将无法将其转换为 Python 表达式。要将其转换为 Python 代码,您需要将其分成多个 语句。
-
由于许多语言都允许这样的表达,这可能是 Python 设计者深思熟虑的设计决定。他们不希望你写那样神秘的代码。
-
stackoverflow.com/questions/1485841/… 有一个较晚的条目(从 2014 年 10 月 15 日开始),通过从调用者的本地符号表中选择变量来在 Python 中实现前置和后置增量有一个相当丑陋但有用的技巧。按名字。您是否想去那里取决于您,但您不太可能找到非常直接的映射。
-
@Wintermute:这个答案基本上是 OP 在最后一段第三段中提出的(“如果我知道......”),然后丢弃,因为它只适用于名称而不是“任何 bash 可能抛出在它:例如 ++y[1]".
-
感谢 Wintermute。我希望你引用的迟到的条目可以解决问题。也感谢所有其他回复,但使翻译功能化的想法很有意义。这样您就可以通过简单地改进功能来改进翻译后的功能。
标签: python bash shell language-translation