如何在单行中使用if/else语句(python -c)?

9
我刚开始学习Python,并尝试在Python -c中使用if/else语句,但是一直出现“Invalid Syntax”错误。我想使用if/else在我的Bash脚本中调用一些Python模块,所以希望能够实现,而且我想坚持使用Python -c而不是Python -m。
下面是我尝试过的内容:

尝试1

python -c "if False: print 'not working';else print 'working'"
  File "<string>", line 1
    if False: print 'not working';else print 'working'
                                     ^
SyntaxError: invalid syntax

尝试2

python -c "if False:    print 'not working';else:    print 'working'"
  File "<string>", line 1
    if False:    print 'not working';else:    print 'working'
                                        ^
SyntaxError: invalid syntax

尝试3

python -c "if False:;    print 'not working';else:;    print 'working'"
  File "<string>", line 1
    if False:;    print 'not working';else:;    print 'working'
             ^
SyntaxError: invalid syntax

任何建议可以帮我解决这个问题吗?
如果我想使用if|elif|elif|else语句怎么办?
提前致谢!

记住,在shell字符串中也可以使用换行符! - user2864740
4个回答

7

对于一个真正通用的解决方案来说,python -c 不仅限于单行。

python -c '
if True:
  print "hello"
else:
  print "world"
'

当然,如果你真的想要的话,你可以把多行字符串格式化为单行:
python -c $'if True:\n\tprint "hello"'\nelse:\n\tprint "world"'

...但是,很明显,这是一个非常糟糕的想法。

如果您真的非常想将Python代码包装在shell中,为什么不使用函数呢?更好的方法是使用带引号的 heredocs 来编写代码。这样做可以让您保持代码本身的字面意思,并通过 argv 传递参数。

python_argv_repr() {
  python - "$@" <<'EOF'
import sys
print sys.argv[1:]
EOF
}

5

简化操作,使用三元形式:

$ python -c "print 'A' if False else 'B'"

3
使用条件表达式和打印函数:
C:\> python -c "from __future__ import print_function; print('not wo
rking') if False else print ('working')"
working

谢谢你的回答。如果我想在Python -c中使用if|elif|elif|else语句,而不仅仅是if|else,该怎么办? - mbz_slk
据我所知,你不能在单行上编写if-else。 - Ashwini Chaudhary
谢谢。有没有办法实现我所要做的事情。基本上是这样,python -c“sd = 10; if sd == 10:print'10'; elif sd = 15: print'15'; else:print'unknown'” - mbz_slk
你可以嵌套三目运算符。 - Erik Kaplun
谢谢。让我试试看。 - mbz_slk
显示剩余2条评论

2

试一下:

python -c "print 'val1' if False else 'val2'"

对于几个条件,请尝试它:

expression1 if condition1 else expression2 if condition2 else expression3

例如将一个值赋给一个变量:
myvar = "val1" if a>10 else "val2" if a==10 else "val3"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接