Как написать inline для цикла в python после другой инструкции?

Начиная с работ

 [email protected][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 [email protected][10.10.10.19] /home/serveur # 

Если у вас есть в середине, это синтаксическая ошибка:

 [email protected][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 [email protected][10.10.10.19] /home/serveur # 

Можно ли избавиться от этой синтаксической ошибки?

Woo, много решений! здесь некоторые другие:

 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 

Это зависит от ОС. Это будет просто на Unix-подобном:

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

правильно дает

 0 1 2 3 4 

в моей системе FreeBSD, потому что оболочки Unix допускают новую линию между кавычками.

Но AFAIK, это невозможно в оболочке Windows CMD.

Написание mutlitple операторов и структур управления в одной строке не является хорошей идеей, так как Python сильно зависит от отступов.

Вы можете правильно loop.py свой код в файле loop.py и все будет в порядке.

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

Запустите его с помощью python loop.py

Если вам действительно нужна программа, написанная в командной строке, попробуйте следующее:

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

Вы можете использовать itertools.count который даст 0, 1, 2, ….

С __import__ вы можете сделать это в одной строке:

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

Возможно, это то, что вы ищете. Взгляните на ответ Томаха.

Как поместить несколько операторов в одну строку

Для меня на 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