gpt4 book ai didi

python - 将程序作为字符串传递给 Python 时使用导入和 for 循环

转载 作者:太空狗 更新时间:2023-10-29 22:04:50 25 4
gpt4 key购买 nike

一位同事最近给我发了一个 bash 脚本,其中包含一些内联 Python。他使用的命令是这样的形式:

$ echo -e 'from foo import bar\nfor i in range(10):\n   bar(i+1).thing = "something"\n\n' | python

该命令运行良好,但我问他为什么不使用python -c。在进一步调查中,我们无法将其转换为 python -c 可以接受的形式,因为 Python 似乎不允许在 for 循环之前使用语句,即使用分号分隔也是如此。

下面的第一个示例显示了您可以导入并打印出导入的对象。第二个示例显示您可以使用 for 循环并从 for 循环打印。第三个示例结合了前两个示例,并导致 SyntaxError。最后,第四个示例显示了在 for 循环之前使用表达式时的 SyntaxError 结果:

$ python -c "from sys import argv; print argv"
['-c']
$ python -c "for v in [1,2,3,4]: print v"
1
2
3
4
$ python -c "from sys import argv; for v in argv: print v"
File "<string>", line 1
from sys import argv; for v in argv: print v
^
SyntaxError: invalid syntax
$ python -c "x = 5; for i in [1,2,3]: print i"
File "<string>", line 1
x = 5; for i in [1,2,3]: print i
^
SyntaxError: invalid syntax

事后看来,SyntaxError 并不奇怪,因为代码在保存在脚本中时无效,并且语句的语法与空格限制相结合可以施加这种类型的限制。话虽这么说,有没有办法通过 python -c 允许在复合语句之前添加语句?

最佳答案

为了澄清 CDspace 的回答,请注意在 Bash 中,与 Python 不同,换行符不会终止字符串文字。因此,您可以执行以下操作:

$python -c 'import sys
for i in range(10):
print(i)

'

关于python - 将程序作为字符串传递给 Python 时使用导入和 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25211865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com