gpt4 book ai didi

Python 内联增加多个变量

转载 作者:太空宇宙 更新时间:2023-11-03 21:22:05 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/54162930/

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