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

191 投票
15 回答
347150 浏览
提问于 2025-04-16 18:33

我对Python中的列表推导式(comprehensions)了解一点,但它们看起来很难“读懂”。我觉得,列表推导式的功能和下面这段代码差不多:

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

但是我又遇到了冲突的:

我还想知道有没有办法运行try(或者类似的东西)而不需要except。我觉得必须写except:pass完全没有意义,这样写多了一行代码。

15 个回答

29

现在你可以只用分号来写代码了。不过,有些东西你不能用,比如 if/elif/else 语句、for/while 循环,还有你不能定义函数。这样做主要是为了在使用导入的模块时,不需要定义任何函数,也不需要用到 if/elif/else 或者 for/while 这些语句和循环。

下面是一个例子,它会获取一首歌的艺术家和歌曲名称,然后在 genius 网站上搜索歌词:

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())
77

你可以使用内置的exec语句,比如:

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

这里的\n表示换行,而\t用来表示缩进(就是一个制表符)。
另外,你需要注意你使用的空格数量,这样你的缩进才能完全对齐。

不过,正如其他回答所说的,这种方法当然只在你真的必须把代码写成一行的时候才用。

exec是一个比较危险的语句(尤其是在构建网页应用时),因为它允许执行任意的Python代码。

192

很遗憾,你想要的在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

也是合法的,可能接近你想要的效果。

如果你仍然想使用一行代码,可以看看 elecprog 的回答。

至于 try ... except 的用法:如果没有 except,它完全没用。try 的意思是“我想运行这段代码,但它可能会出错”。如果你不在乎这个错误,可以不写 try。但是一旦你写上它,就表示“我想处理可能出现的错误”。而 pass 则表示你不想特别处理这个错误。但这意味着你的代码会继续运行,而不是停止。

撰写回答