Python内联增加多个变量

发布于 2021-01-29 19:23:47

为什么这项工作

>> 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
关注者
0
被浏览
47
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您不能在多个目标上使用增强分配语句。

    引用扩充作业文档

    除了在单个语句中分配给元组和多个目标外, 由扩展赋值语句完成的赋值与普通赋值的处理方式相同。类似地,除了可能 的就地
    行为外,通过扩充分配执行的二进制操作与正常的二进制操作相同。

    强调我的。

    就地扩展分配从转换target -= expressiontarget = target.__isub__(expression)__i...__每个操作员都有相应的钩子),并且不支持将该操作转换为多个目标。

    引擎盖下,增量赋值是二进制运算符(的一个特例+*-等等),
    的分配。因为实现是基于那些运算符的,而二进制运算符只有两个操作数,所以原始实现建议中永远不会包含多个目标。

    您只需要简单地分别应用分配:

    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将确保调用正确的钩子,以对支持它的可变类型进行就地减法。

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

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


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看