【问题标题】:How to write an inline for loop in python after another instruction?如何在另一条指令后在 python 中编写内联 for 循环?
【发布时间】:2015-07-29 09:27:31
【问题描述】:

for开头的作品

root@messagerie-secours[10.10.10.19] /home/serveur # python -c "for x in xrange(10):print x;"
0
1
2
3
4
5
6
7
8
9
root@messagerie-secours[10.10.10.19] /home/serveur # 

如果中间有for,就是语法错误:

root@messagerie-secours[10.10.10.19] /home/serveur # python -c "a=2;for x in xrange(10):print x;"
  File "<string>", line 1
    a=2;for x in xrange(10):print x;
          ^
SyntaxError: invalid syntax
root@messagerie-secours[10.10.10.19] /home/serveur #

有没有可能摆脱那个语法错误?

【问题讨论】:

  • 不,不可能删除语法错误并在内联时仍然使用 for 循环。

标签: python for-loop command-line


【解决方案1】:

哇,有很多解决方案!这里还有一些其他的:

python -c 'print "\n".join(map(str, xrange(10)))'

python <<"EOF"
for x in range(10):
  print x
EOF

echo $'a=12\nfor x in range(a): print x' | python

【讨论】:

  • 不错!另外,第三个也可以这样写(测试,工作):python -c $'a=2\nfor x in xrange(1,10):\n print x'
【解决方案2】:

这取决于底层操作系统。在类 Unix 上会很容易:

python -c "a=5
for i in range(a): print i"

正确给出

0
1
2
3
4

在我的 FreeBSD 系统上,因为 Unix shell 允许在引号之间换行。

但是 AFAIK,这在 Windows CMD shell 中是不可能的。

【讨论】:

    【解决方案3】:

    在一行中编写多个语句和控制结构并不是一个好主意,因为 Python 严重依赖缩进。

    您可以将代码正确缩进到loop.py 文件中,应该没问题。

    #!/usr/bin/nev python
    
    a = 2
    for x in xrange(10):
        print x
    

    使用python loop.py 运行它。

    如果你真的需要命令行编写的程序,试试这个:

    root@messagerie-secours[10.10.10.19] /home/serveur # python -c "
    > a = 2
    > for x in range(10) :
    >     print x
    > "
    

    【讨论】:

      【解决方案4】:

      您可以使用itertools.count,它将产生 0、1、2、...。

      使用__import__,您可以一行完成:

      python -c 'for x in __import__("itertools").count(): print x'
      

      【讨论】:

        【解决方案5】:

        以下在 Python 2.7 上适用于我:

        python -c "exec('\n'.join(['a=42', 'for x in xrange(10):', '  print x', 'print a']))"
        

        给出输出:

        0
        1
        2
        3
        4
        5
        6
        7
        8
        9
        42
        

        【讨论】:

        • exec 通常不是个坏主意吗?
        • 是的,但这是已知输入,因此应该相对安全。
        猜你喜欢
        • 2019-06-21
        • 2014-09-20
        • 1970-01-01
        • 1970-01-01
        • 2018-08-04
        • 1970-01-01
        • 2022-06-15
        • 1970-01-01
        • 2010-09-08
        相关资源
        最近更新 更多