如何格式化 Python 中的字符串,使其在执行时产生有效的 if .. then .. else 语句?
How to format a string in Python that when executed produces a valid if .. then .. else statement?
我想写一个 Python 字符串,执行时会这样:
if condition:
consequence
else:
alternative
所以,我尝试了类似的方法:
string = 'if condition: consequence; else: alternative;'
执行:
>>> exec(string)
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
exec(string)
File "<string>", line 1
if condition: consequence; else: alternative;
^
SyntaxError: invalid syntax
但是如您所见,我遇到了语法错误。字符串应该如何格式化?
感谢您的帮助!
PS:这个问题不是关于如何评估或执行 Python 字符串(参见 How do I execute a string containing Python code in Python?),而是关于执行 if..then 所需的格式。 .else 子句。
一些上下文:
我正在关注 Tom Stuart 的书 "understanding computation"。其中一部分是关于了解编程语言的工作原理。因此,他给出了一种玩具语言 'SIMPLE' 的示例代码。他在 Ruby 中展示了如何将 SIMPLE 转换为 Ruby 代码。但是,我正在尝试将其写在 Python 中,因为这让我更感兴趣。 Ruby 示例是:
def to_ruby
"-> e { if (#{condition.to_ruby}).call(e)" +
" then (#{consequence.to_ruby}).call(e)" +
" else (#{alternative.to_ruby}).call(e)" +
" end }"
end
您可以使用 exec
来执行 Python 语句,包括换行符:
>>> exec("if True:\n print 'abc'\nelse:\n print 'def'")
abc
如果使用 Python 3,打印时需要括号:
>>> exec("if True:\n print('abc')\nelse:\n print('def')")
abc
根据 Kevin Guan 和 Tom Karzes 的意见,我找到了以下替代问题解决方案:
>>> exec("""
if True:
print('abc')
else:
print('def')
""")
abc
这种格式避免了有点烦人的 \n 符号。
我想写一个 Python 字符串,执行时会这样:
if condition:
consequence
else:
alternative
所以,我尝试了类似的方法:
string = 'if condition: consequence; else: alternative;'
执行:
>>> exec(string)
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
exec(string)
File "<string>", line 1
if condition: consequence; else: alternative;
^
SyntaxError: invalid syntax
但是如您所见,我遇到了语法错误。字符串应该如何格式化?
感谢您的帮助!
PS:这个问题不是关于如何评估或执行 Python 字符串(参见 How do I execute a string containing Python code in Python?),而是关于执行 if..then 所需的格式。 .else 子句。
一些上下文:
我正在关注 Tom Stuart 的书 "understanding computation"。其中一部分是关于了解编程语言的工作原理。因此,他给出了一种玩具语言 'SIMPLE' 的示例代码。他在 Ruby 中展示了如何将 SIMPLE 转换为 Ruby 代码。但是,我正在尝试将其写在 Python 中,因为这让我更感兴趣。 Ruby 示例是:
def to_ruby
"-> e { if (#{condition.to_ruby}).call(e)" +
" then (#{consequence.to_ruby}).call(e)" +
" else (#{alternative.to_ruby}).call(e)" +
" end }"
end
您可以使用 exec
来执行 Python 语句,包括换行符:
>>> exec("if True:\n print 'abc'\nelse:\n print 'def'")
abc
如果使用 Python 3,打印时需要括号:
>>> exec("if True:\n print('abc')\nelse:\n print('def')")
abc
根据 Kevin Guan 和 Tom Karzes 的意见,我找到了以下替代问题解决方案:
>>> exec("""
if True:
print('abc')
else:
print('def')
""")
abc
这种格式避免了有点烦人的 \n 符号。