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

9 投票
4 回答
3881 浏览
提问于 2025-04-18 04:30

我刚开始学习Python,想在使用python -c的时候用if/else语句,但总是出现无效语法的错误。我想用python -c来调用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这样的语句呢?

提前谢谢你们!

4 个回答

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"
3

使用条件表达式和打印函数:

C:\> python -c "from __future__ import print_function; print('not wo
rking') if False else print ('working')"
working
5

简单点,使用三元表达式:

$ python -c "print 'A' if False else 'B'"
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里,为什么不试试用函数呢?更进一步,为什么不使用带引号的heredoc来写你的代码呢?(这样做可以让你保持代码的原样,同时通过argv传递参数)。

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

撰写回答