比在python中使用if-else语句更好的方法

sam*_*sam 9 python if-statement

可能重复:
在一行上放置一个简单的if-then语句

我正在处理一个python表达式,我想要压缩该表达式而不是使用if else语句.

s = [1, 2, 3, 4]
if len(s)>5:
    print s.index(5)
else:
    print 'cant print'
Run Code Online (Sandbox Code Playgroud)

有没有比使用else else语句更好的方法?

Sim*_*ser 14

你可以做:

s = [1, 2, 3, 4]
print 'y' if len(s) > 5 else 'n'
Run Code Online (Sandbox Code Playgroud)

但是我不认为这会使代码更具可读性(一目了然).另请注意,if并且else不创建循环,它们只是控制流的语句.循环使用for和编写while.

  • 同意,这符合OPs请求,但不会产生更易读的代码.+1(不情愿地因为混淆) (3认同)

the*_*orn 11

简短,但非常混淆(不要这样做):

print 'ny'[len(s) > 5]
Run Code Online (Sandbox Code Playgroud)

[编辑]你永远不应该这样做的原因,是因为它使用了大多数人都不知道的语言属性,即bool是int的子类.在您发现自己编写类似OP的代码的大多数情况下,通常最好创建一个标志变量

s_is_long = len(s) > 5
Run Code Online (Sandbox Code Playgroud)

那么你可以使用任何更合适的方式来编写打印,例如:

print 'y' if s_is_long else 'n'
Run Code Online (Sandbox Code Playgroud)

要么

print {True: 'y', False: 'n'}[s_is_long]
Run Code Online (Sandbox Code Playgroud)

或者最可读的......

if s_is_long:
    print 'y'
else:
    print 'n'
Run Code Online (Sandbox Code Playgroud)

  • 虽然技术上是正确的,但这是一个可怕的答案IMO.对于许多人来说,乍一看很难理解.鉴于这个问题的答案通常会被新手语言和/或新编程的人阅读,我认为建议这样的结构不是一个好主意. (3认同)
  • @Bryan注意到我明确说"不要这样做",所以我不会称之为建议. (3认同)
  • @thebjorn:虽然"(不要这样做)"总比没有好,如果你花了一点力气解释为什么有人不应该这样做,你的答案会更好.请记住:观众主要是那些可能不知道为什么这是个坏主意的人.这是你教育他们的机会. (2认同)

Don*_*ion 7

在这种情况下,您可以使用try/except块:

try:
    print s.index(5)
except ValueError:
    print "5 not in list"
Run Code Online (Sandbox Code Playgroud)

  • 请问为什么?这是一个"pythonic"的使用它!"不要求许可,但请原谅!" - 您的if子句要求获得许可,然后执行它要求的内容.try statment就是这样做的,如果它失败了,它会处理forgivness部分. (2认同)