Python for推导式中是否有无需迭代即可声明变量的let类语法?
Python推导式内变量绑定问题解答
结论
Python目前(截至3.12正式版本)没有提供推导式内专门的let绑定原生语法,你提到的Common Lisp、Clojure、Scala等语言的对应特性暂未被纳入Python标准语法。
现有可用的实现方案
你目前使用的单元素可迭代对象迭代绑定是Python社区广泛认可的标准替代方案,语法完全合法,单元素列表的创建和迭代开销极低,实际生产中被大量使用:
data = [w for y in f() for z in [g(y)] if z > 0 for w in h(z)]
如果你使用Python 3.8及以上版本,且绑定的变量直接用于后续的条件判断,可以用海象赋值运算符:=写出可读性更高的代码:
data = [w for y in f() if (z := g(y)) > 0 for w in h(z)]
补充说明
如果需要绑定多个变量、或者变量绑定逻辑非常复杂,不建议强行嵌套在推导式内实现,改用普通for循环逐行处理的代码可读性会更高,更符合Python可读性优先的设计原则。
内容的提问来源于stack exchange,提问作者Jim Newton
相关产品推荐
相关产品推荐

