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

Rhy*_*hys 129 python

我不确定在什么标题下完全考虑这个问题,编码高尔夫看起来是合适的,如果有点不明确.

我对python有一点了解,但看起来很难"阅读".我看到它的方式,理解可能会完成与以下代码相同:

for i in range(10): if i == 9: print('i equals 9')
Run Code Online (Sandbox Code Playgroud)

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

我的问题:

有什么方法可以让以下示例进入ONE LINE.

try:
    if sam[0] != 'harry':
        print('hello',  sam)
except:
    pass
Run Code Online (Sandbox Code Playgroud)

像这样的东西会很棒:

try: if sam[0] != 'harry': print('hellp',  sam)
except:pass
Run Code Online (Sandbox Code Playgroud)

但是我又遇到了相互冲突的':'我也很想知道是否有办法运行尝试(或类似的东西),除非,我需要放置除了之外似乎完全没有意义:传入那里.这是一条浪费的线.

谢谢你输入......这里有一个笑脸:D

Tho*_*asH 126

不幸的是,你想要的东西是不可能的Python(这使得Python对于命令行单行程序来说几乎没用).即使明确使用括号也不能避免语法异常.你可以使用一系列简单的语句,用分号分隔:

for i in range(10): print "foo"; print "bar"
Run Code Online (Sandbox Code Playgroud)

但是只要添加引入缩进块(如if)的构造,就需要换行符.也,

for i in range(10): print "i equals 9" if i==9 else None
Run Code Online (Sandbox Code Playgroud)

是合法的,可能接近你想要的.

至于try ... except事情:如果没有,那将是完全无用的except.try说"我想运行这段代码,但它可能会抛出异常".如果你不关心异常,请不要理会try.但是一旦你把它放入,你就说"我想处理一个潜在的例外".该pass那么说,你要没有特别处理.但这意味着您的代码将继续运行,否则将无法运行.

  • @ThomasH"*(这使Python对于命令行单行程序几乎无用)*":不会阻碍我.95%的案例不需要换行.其余的通过\n:`python -c"exec \"print'A'\n for i in 1,2,3:print i \""` (5认同)
  • 重新``try:``:Python语法规则不会让你在没有附带"except"子句的情况下使用唯一的"try"子句.我所做的是将try-except包装在自己的函数中,然后调用它.就像``if(checkint(s))...``和``def checkint(s):try:int(s)\nreturn True \nexcept:return False``. (4认同)
  • @TorstenBronger 这确实回答了问题,并且该语言因没有能力而自责。你正在射杀信使。 (3认同)

ele*_*rog 50

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

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

\n换行符在哪里并\t用作缩进(选项卡).
此外,您应该计算您使用的空格,因此您的缩进完全匹配.

但是,正如所有其他答案已经说过的那样,当然只有当你真的必须把它放在一条线上时才能使用它.

exec 是一个非常危险的声明(特别是在构建webapp时),因为它允许执行任意Python代码.

  • 谢谢!这应该被标记为正确的答案,因为它实际上是有效的,与其他答案不同.但是,当然,除非你必须,否则**永远不会这样做!我实际上需要这种语法,因为我必须将脚本输入到固定的单行文本框中. (3认同)

小智 10

是的,这篇文章已有 8 年历史,但如果有人来这里也寻找答案:您现在可以只使用分号。但是,您不能使用 if/elif/else 语句、for/while 循环,也不能定义函数。这个的主要用途是在使用导入的模块时,您不必定义任何函数或使用任何 if/elif/else/for/while 语句/循环。

这是一个示例,它采用歌曲的艺术家、歌曲名称并搜索天才的歌词:

import bs4, requests; song = input('Input artist then song name\n'); print(bs4.BeautifulSoup(requests.get(f'https://genius.com/{song.replace(" ", "-")}-lyrics').text,'html.parser').select('.lyrics')[0].text.strip())
Run Code Online (Sandbox Code Playgroud)


小智 9

对于python -c面向解决方案,并且假设您使用 Bash shell,是的,您可以使用简单的单行语法,如下例所示:

假设您想做这样的事情(与您的示例非常相似,包括except: pass说明):

python -c  "from __future__ import print_function\ntry: import numpy; print( numpy.get_include(), end='\n' )\nexcept:pass\n" OUTPUT_VARIABLE __numpy_path
Run Code Online (Sandbox Code Playgroud)

这将不起作用并产生此错误

python -c  "from __future__ import print_function\ntry: import numpy; print( numpy.get_include(), end='\n' )\nexcept:pass\n" OUTPUT_VARIABLE __numpy_path
Run Code Online (Sandbox Code Playgroud)

这是因为 Bash 和 Python 之间存在对转义序列解释的竞争。\n为了解决这个问题,可以使用$'string'Bash 语法强制\nBash 解释先于Python 解释。

为了使示例更具挑战性,我end=..\n..在 Python print 调用中添加了一个典型的 Python 规范:最后,您将能够同时获得Bash 和 Python 的两种 \n解释,每种解释都针对其关注的文本片段。所以最终正确的解决方案是这样的:

python -c  $'from __future__ import print_function\ntry:\n import numpy;\n print( numpy.get_include(), end="\\n" )\n print( "Hello" )\nexcept:pass\n' OUTPUT_VARIABLE __numpy_path
Run Code Online (Sandbox Code Playgroud)

这会导致正确的干净输出而不会出现错误:

  File "<string>", line 1
    from __future__ import print_function\ntry: import numpy; print( numpy.get_include(), end='\n' )\nexcept:pass\n
                                                                                                                  ^
SyntaxError: unexpected character after line continuation character `
Run Code Online (Sandbox Code Playgroud)

注意:这应该适用于exec面向 - 的解决方案,因为问题仍然相同(Bash 和 Python 解释器竞争)。

注2:可以通过用一些替换一些来解决这个问题\n;但它不会在任何时候都起作用(取决于Python构造),而我的解决方案允许始终“一行”任何经典的多行Python程序。

注3:当然,在单行的时候,一定要注意Python的空格和缩进,因为实际上我们这里并不是严格意义上的“单行”,而是\n对bash和bash之间的转义序列进行了适当的混合管理。Python。这就是我们处理任何经典多行 Python 程序的方式。解决方案示例也说明了这一点。


Joh*_*web 6

我建议要这样做......

你所描述的不是一种理解.

PEP 8风格指南Python代码,我建议,有这样一段关于复合语句说:

  • 通常不鼓励使用复合语句(同一行上的多个语句).

是:

      if foo == 'blah':
          do_blah_thing()
      do_one()
      do_two()
      do_three()
Run Code Online (Sandbox Code Playgroud)

而不是:

      if foo == 'blah': do_blah_thing()
      do_one(); do_two(); do_three()
Run Code Online (Sandbox Code Playgroud)

以下是进行区分的示例理解:

>>> [i for i in xrange(10) if i == 9]
[9]
Run Code Online (Sandbox Code Playgroud)


Tia*_*opo 5

我没有激励这个,但是说​​你在命令行上,除了python你什么都没有,你真的需要一个单行,你可以这样做:

python -c "$(echo -e "a='True'\nif a : print 1")"
Run Code Online (Sandbox Code Playgroud)

我们在这里做的是\n在评估python代码之前进行预处理.

这太超级了!不要写这样的代码.