我想尽可能在我的代码中引入赋值表达式,但我偶然发现了一个非常简单的案例,我没有找到一个示例:
举一个非常常见的例子
[(y := f(x), x/y) for x in some_iterable]
我想知道如何不直接使用y
,例如我只想要x/y
and y/x
。
在一个更现实的例子中,我目前会写
[(obj.elem1, obj.elem2) for x in some_iterable for obj in (f(x),)]
这不是很直观,但我知道模仿 alet
或where
语义的唯一方法。
有没有办法说
[(obj.elem1, obj.elem2) where obj := f(x) for x in some_iterable]
?
编辑:
一种非常明显的方法是写
[((obj := f(x)).elem1, obj.elem2) for x in some_iterable]
但这在我眼中很难读懂。我宁愿有一种方法仍然可以编写(obj.elem1, obj.elem2)
并将分配移出元组。