问题标签 [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 投票
4 回答
20436 浏览

python - 是否可以添加带有列表理解的 where 子句?

考虑以下列表理解

这会根据条件过滤可迭代对象f并返回x,f(x). 这种方法的问题f(x)是计算两次。如果我们可以这样写就好了

但是在 python 中,我们必须使用嵌套推导来避免对 f(x) 的重复调用,这使得推导看起来不太清晰

有没有其他方法可以让它更具 Python 和可读性?


更新

即将在 python 3.8 中推出!政治公众人物

0 投票
3 回答
20413 浏览

python - ":=" 语法和赋值表达式:什么和为什么?

PEP 572引入了为 Python 3.8 实现的赋值表达式(俗称海象运算符)。这似乎是一个非常重要的新特性,因为它将允许在推导和 lambda 函数中进行这种形式的赋值。

赋值表达式的语法、语义和语法规范究竟是什么?

当PEP 379中关于“添加赋值表达式”的类似想法之前被拒绝时,为什么要引入这个新的(并且看似非常激进的概念) ?

0 投票
1 回答
338 浏览

python - 在 Python 中使用赋值表达式时如何完成赋值语句“x = y := f(x)”?

我在推特上读到:

#Python 新闻:Guido 接受了 PEP 572。Python 现在有赋值表达式。

(更正第二行代码中的矿井)

如前所述,PEP 572 -- 赋值表达式描述了这存在于Python 3.8中:

这是一个提议,用于创建一种使用符号为表达式中的变量赋值的方法NAME := expr

我已经浏览了描述和示例,我发现这是一种避免重复调用或分配的便捷方法,所以不要:

或更高效:

现在可以说:

同样,现在可以说:

但是,我不明白 PEP 中给出的这个例子是如何无效的:

说得对y0 = (y1 := f(x))吗?怎么可能使用?

对于那些想知道它在哪里可用的人的脚注:我已经安装了Python 3.7,但它在那里不起作用,因为 PEP 当前显示为“状态:草稿”。但是,PEP 谈到了概念证明/参考实现(https://github.com/Rosuav/cpython/tree/assignment-expressions),所以使用包含它的 Python 3.8 alpha 0 版本是一个问题。

0 投票
1 回答
2082 浏览

python - 在 Python 3.8 中使用赋值表达式,为什么我们需要在 `with` 中使用 `as`?

现在PEP 572已经被接受了,Python 3.8注定会有赋值表达式,所以我们可以在中使用赋值表达式with,即

代替

它会像以前一样工作。

as关键字与withPython 3.8 中的语句有什么用?这不是违背 Python 的禅宗吗:“应该有一种——最好只有一种——明显的方式来做到这一点。” ?


最初提出该功能时,并没有明确指定赋值表达式是否应该括起来,with并且

可以工作。然而,在 Python 3.8a0 中,

将造成

但括号内的表达式有效。

0 投票
1 回答
1158 浏览

python - 可以在 Python 3.7 中使用 __future__ 启用赋值表达式吗?

Python 3.8 引入了PEP 572中描述的赋值表达式。有没有办法在 Python 3.7.x 中测试这个新特性?

过去,新的语言功能已使用__future__导入向后移植到早期的 Python 版本。

  • __future__赋值表达式有导入吗?
  • 如果是,功能名称是什么?
  • 如果没有,是否有计划添加它?(3.7 将持续一段时间)
0 投票
3 回答
2114 浏览

python - 如何使用 Python 3.8 alpha 中引入的赋值表达式重写这个简单的循环?

在我看来,将经典的 while 循环与赋值表达式互换并不是那么简单循环交换以保持代码看起来很棒并不是那么简单。

考虑example1

example2

您将如何修改example1以获得相同的输出(不跳过0example2?(当然不改变a = 0

0 投票
1 回答
238 浏览

python - 了解新 python := 运算符的原因

这是一个元编程问题:我想了解为什么 python 开发人员在新的:=. 我知道它是干什么用的。但是,我想知道为什么开发人员选择了一个新符号而不是重新使用例如as运算符。

即为什么认为写作更可取

而不是

0 投票
3 回答
530 浏览

python - 使用 Python 3.8 赋值表达式作为 let 表达式?

我的预期行为是:

但是我得到了预期的AttributeError: __enter__错误。有没有一种简单的方法可以实现这一点,或者类似的方法可以让我弥补没有 Lisp 风格的 let 表达式?

PS我知道我可以做类似的事情:

接着:

或者:

但不得不说let.x,而不是只是x让它太丑陋了!

0 投票
3 回答
348 浏览

python - 列表推导中的 Python 3.8 赋值表达式

我第一次尝试使用新的赋值表达式并且可以使用一些帮助。

给定三行日志输出:

目的是仅提取State俄罗斯印度美国)和记录数(93,100,100)。所以想要的结果是:

这需要将以下步骤转换为 Python:

  • 将每一行转换为列表元素
  • 按空间分割,例如 ['Writing', '93', 'records', 'to', '/data/newstates-900.03-07_07/top100.newstates-900.03-07_07/Russia.seirdc.March6-900.12.csv', '..']
  • 用'/'分割第五个这样的标记并保留最后一个元素:例如Russia.seirdc.March6-900.12.csv
  • 用 '.' 分割那个元素 并保留第一个(0'th)元素,例如Russia

这是我的错误尝试:

0 投票
1 回答
863 浏览

python - “海象算子”赋值的多个条件

我想知道是否可以使用“海象运算符”根据某些条件以及现有条件来分配值。例如,post_url如果该字符串包含某些子字符串,则将字符串分配给:

但是,这只是post_url由于对and操作的评估而将布尔值分配给。