问题标签 [python-assignment-expression]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
14 浏览

python-3.x - 不直接使用的赋值表达式

我想尽可能在​​我的代码中引入赋值表达式,但我偶然发现了一个非常简单的案例,我没有找到一个示例:

举一个非常常见的例子

我想知道如何直接使用y,例如我只想要x/yand y/x

在一个更现实的例子中,我目前会写

这不是很直观,但我知道模仿 aletwhere语义的唯一方法。

有没有办法说

?

编辑

一种非常明显的方法是写

但这在我眼中很难读懂。我宁愿有一种方法仍然可以编写(obj.elem1, obj.elem2)并将分配移出元组。

0 投票
1 回答
162 浏览

python - 如何避免理解中的 Python 赋值表达式泄漏

Effective Python一书中,作者建议使用赋值表达式来避免理解中的冗余,例如:

代替

result有价值{2: 4, 3: 6}

作者指出

如果推导式在推导式的值部分使用海象运算符并且没有条件,它会将循环变量泄漏到包含范围内。[...] 最好不要泄漏循环变量,所以我建议只在理解的条件部分使用赋值表达式。

但是,在上面的示例中,y在程序结束时设置为 6。因此,赋值表达式中的变量泄漏了,尽管它是在条件中定义的。

列表推导也会发生同样的事情:

甚至对于生成器表达式:

我错过了什么?有什么方法可以完全避免在理解中的赋值表达式中泄漏?

0 投票
2 回答
331 浏览

python - 带条件表达式的赋值表达式

以下片段

提高

赋值表达式不能这样用吗?

如果不是,我的假设有什么问题:我的印象是这个想法是在单个表达式中为昂贵的操作预先分配一个虚拟值。


expensive_function(x)为了澄清这个想法,询问是否可以通过分配给虚拟变量来使用赋值操作来简化

0 投票
3 回答
126 浏览

python - 赋值表达式可以使用列表理解创建斐波那契数列吗?

使用赋值表达式,我想我可以尝试列表理解来创建 Fibonacci。我首先初始化一个包含 5 个元素 f = [1,2,3,4,5] 的斐波那契列表,前两个值是种子。下面的测试运行显示了赋值表达式的工作原理。

但是真正的斐波那契在 f[n] 处失败,在 Python shell 中显示了一个红色标记。

是因为 f[n] 不是有效的变量名吗?
这是否意味着赋值表达式可能对斐波那契的列表理解没有帮助?

0 投票
1 回答
253 浏览

python - 赋值表达式的求值顺序(海象运算符)

我有以下表达式:

现在,a == 2手术后,正如预期的那样。结果就是我想要的,即a在分配之前与分配的 RHS 进行比较。

反转相等运算符的顺序会反转结果:

在PEP-572, relative priority section中似乎没有任何与此极端情况直接相关的内容。下一节,对评估顺序的更改提到评估顺序是从左到右的。这就是这里发生的事情吗(存储 的值a,更新它,比较 vs 更新a,然后比较它的新值)?

这种行为在哪里定义,它的可靠性如何?

0 投票
1 回答
71 浏览

python - Python3.8赋值表达式,用于列表推导或作为表达式

我最近发现存在赋值表达式。我想重构我的一些代码以利用它们。我想使用它的大多数地方都相对容易转换。

但是,我不确定用于此特定功能的语法。functools.reduce有没有办法可以用赋值表达式代替我的用法?

如何直接将赋值表达式的结果用作表达式对我来说并不简单。有没有一种很好的pythonic方式来做到这一点?

0 投票
2 回答
59 浏览

python - 为什么在循环条件中使用赋值表达式会存储布尔值?

此代码将您最喜欢的食物存储在一个列表中,但输入变为布尔类型字符。为什么会发生这种情况,我该如何解决?

0 投票
0 回答
40 浏览

python - 使用二分搜索编码示例的海象算子风格问题

有时我发现算法逻辑的简洁表达比冗长的表达更直观。一个例子是二分搜索(维基百科),一个简单的 Python 实现如下:

(注意:我已经引入LR参数作为要搜索的排序数组参数中间隔的第一个和最后一个索引A,而不是使用维基百科页面的伪代码中n的长度参数。)A

依赖条件表达式和赋值表达式(海象运算符)的更短的实现是:

对我来说,虽然单行循环体很简洁,严格来说可能比使用传统 if/else 块的展开循环体需要更多的操作,但最好是它不需要眼睛上下移动通过代码来掌握发生了什么。它告诉我,在第一次更新M为当前搜索区间的中点之后L, R,我们然后通过缩小它来更新该区间,使其左侧相同,右侧减少,反之亦然,具体取决于 的相对值排序后的输入数组中的中点值A和目标值T

事实上,如果我说实话,我真正想做的是:

我想知道上面的第二个和第三个代码示例是否有任何样式指南通知禁令,或者这些是否被认为是海象运算符的风格上可接受的用途?