Python代码高尔夫中for/while/with与分号联用的语法错误问题
Python分号语法限制与代码高尔夫解决办法
为什么会报错?
Python的分号;只能用来分隔简单语句,像import os、print(1)这类单一行就能完成的语句都属于简单语句。而for循环是复合语句——哪怕你把for i in range(10): print(1)写在一行,它本质还是包含循环头和子语句的复合结构,Python语法规则明确禁止用分号将复合语句和其他语句拼接在同一行。
简单来说,分号的作用只是替代换行,把多个独立的简单语句挤到一行;复合语句必须作为一个完整的单元存在,不能被分号拆分或拼接。
代码高尔夫里的解决办法
要在一行里同时实现导入和循环,最常用的技巧是用exec()函数把复合语句包装成字符串,变成简单语句的一部分:
import os;exec('for i in range(10):print(1)')
如果想更紧凑,也可以把导入语句也放进exec的字符串里:
exec('import os\nfor i in range(10):print(1)')
要是能接受两行代码,直接换行写本来就是合法的,只是代码高尔夫场景下一行写法通常更优。
内容的提问来源于stack exchange,提问作者npengra317
相关产品推荐
相关产品推荐

