我不确定在什么标题下完全考虑这个问题,编码高尔夫看起来是合适的,如果有点不明确.
我对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那么说,你要没有特别处理.但这意味着您的代码将继续运行,否则将无法运行.
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代码.
小智 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 程序的方式。解决方案示例也说明了这一点。
我建议不要这样做......
你所描述的不是一种理解.
PEP 8风格指南Python代码,我不建议,有这样一段关于复合语句说:
- 通常不鼓励使用复合语句(同一行上的多个语句).
是:
Run Code Online (Sandbox Code Playgroud)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()
以下是进行区分的示例理解:
>>> [i for i in xrange(10) if i == 9]
[9]
Run Code Online (Sandbox Code Playgroud)
我没有激励这个,但是说你在命令行上,除了python你什么都没有,你真的需要一个单行,你可以这样做:
python -c "$(echo -e "a='True'\nif a : print 1")"
Run Code Online (Sandbox Code Playgroud)
我们在这里做的是\n在评估python代码之前进行预处理.
这太超级了!不要写这样的代码.
| 归档时间: |
|
| 查看次数: |
179620 次 |
| 最近记录: |