gpt4 book ai didi

Python内联增加多个变量

转载 作者:IT老高 更新时间:2023-10-28 21:12:57 24 4
gpt4 key购买 nike

为什么会这样

>> x, y = (1, 2)
>> print x, y
1 2

但是扩充会导致语法错误..

>> x, y -= (1, 2)
SyntaxError: illegal expression for augmented assignment

有没有不同的方式,我期待:

>> x, y -= (1, 2)
>> print x, y
0 0

最佳答案

您不能在多个目标上使用扩充的赋值语句,不。

引用 augmented assignment documentation :

With the exception of assigning to tuples and multiple targets in a single statement, the assignment done by augmented assignment statements is handled the same way as normal assignments. Similarly, with the exception of the possible in-place behavior, the binary operation performed by augmented assignment is the same as the normal binary operations.

强调我的。

就地扩充赋值从 target -= expression 转换为 target = target.__isub__(expression)(对应的 __i...__ 每个运算符的钩子(Hook))并且不支持将该操作转换为多个目标。

在底层,增强赋值是二元运算符(+*- 等)、 的特化不是的任务。因为实现是基于这些运算符,而二元运算符只有两个操作数,所以原始 implementation proposal 中从未包含多个目标。 .

您必须单独应用分配:

x -= 1
y -= 2

或者,如果你真的,真的想变得复杂,使用 operator 模块和 zip()operator.isub 应用到组合(通过 itertools.starmap(),然后使用元组赋值:

from operator import sub
from itertools import starmap

x, y = starmap(operator.isub, zip((x, y), (1, 2)))

isub 将确保调用正确的钩子(Hook),允许对支持它的可变类型进行就地减法。

或者,如果您正在操作不支持就地操作的类型,则使用生成器表达式就足够了:

x, y = (val - delta for val, delta in zip((x, y), (1, 2)))

关于Python内联增加多个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18132687/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com