如何将多个语句放在一行中?

2024-04-25 05:06:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我不确定到底用什么标题来思考这个问题,如果有点不具体的话,编写高尔夫代码似乎是合适的。

我知道一些python中的理解,但它们似乎很难“阅读”。在我看来,理解可能与下面的代码一样:

for i in range(10): if i == 9: print('i equals 9')

这段代码比理解当前的工作方式更容易阅读,但我注意到不能在一行中有两个“:”。。。这也给我带来了。。。

我的问题:

有没有办法把下面的例子放在一行。

try:
    if sam[0] != 'harry':
        print('hello',  sam)
except:
    pass

像这样的事情会很好:

try: if sam[0] != 'harry': print('hellp',  sam)
except:pass

但我又遇到了矛盾的“:” 我也很想知道是否有一种方法可以在没有except的情况下运行try(或类似的方法),我需要把except放在这里似乎完全没有意义:pass in there。这是一条虚线。

谢谢你的意见。。。这里有一个微笑:D


Tags: 方法代码in标题forifsam方式
3条回答

您可以使用内置的exec语句,例如:

exec("try: \n \t if sam[0] != 'harry': \n \t\t print('hello',  sam) \nexcept: pass")

其中,\n是一个换行符,\t用作缩进(选项卡)。
此外,您应该计算使用的空格,以便缩进完全匹配。

然而,正如所有其他答案已经说过的那样,这当然只在您真正需要将它放在一行时使用。

exec是一个相当危险的语句(尤其是在构建webapp时),因为它允许执行任意Python代码。

不幸的是,Python无法满足您的需求(这使得Python对于命令行的一行程序几乎毫无用处)。即使显式使用括号也不能避免语法异常。您可以使用一系列由分号分隔的简单语句:

for i in range(10): print "foo"; print "bar"

但只要添加引入缩进块的构造(如if),就需要换行符。还有

for i in range(10): print "i equals 9" if i==9 else None

是合法的,可能和你想要的差不多。

至于try ... except的事情:如果没有except,它将是完全无用的。try说“我想运行这个代码,但它可能会抛出一个异常”。如果你不关心这个异常,就把try放在一边。但一旦你把它放进去,你就在说“我想处理一个潜在的异常”。然后pass表示不希望具体处理它。但这意味着你的代码将继续运行,否则不会。

我建议不要这样做…

你所描述的是而不是一种理解。

我推荐的PEP 8 Style Guide for Python Code在复合语句中这样说:

  • Compound statements (multiple statements on the same line) are generally discouraged.

Yes:

      if foo == 'blah':
          do_blah_thing()
      do_one()
      do_two()
      do_three()

Rather not:

      if foo == 'blah': do_blah_thing()
      do_one(); do_two(); do_three()

下面是一个示例来区分:

>>> [i for i in xrange(10) if i == 9]
[9]

相关问题 更多 >