Bạn không thể sử dụng câu lệnh gán tăng cường trên nhiều mục tiêu, không.
Trích dẫn các augmented assignment documentation:
Ngoại trừ giao cho các bộ và nhiều mục tiêu trong một tuyên bố đơn, sự phân công thực hiện bằng câu lệnh gán Augmented được xử lý theo cùng một cách như bài tập bình thường. Tương tự, ngoại trừ có thể có tại chỗ hành vi, thao tác nhị phân được thực hiện bằng cách gán tăng cường cũng giống như các phép toán nhị phân thông thường.
Mỏ nhấn mạnh.
Chỉ định tăng cường tại chỗ được dịch từ target -= expression
sang target = target.__isub__(expression)
(với các móc nối tương ứng __i...__
cho mỗi nhà điều hành) và dịch hoạt động đó sang nhiều mục tiêu không được hỗ trợ.
Dưới mui xe, chuyển nhượng tăng cường là một chuyên môn của các nhà khai thác nhị phân (+
, *
, -
, vv), không chuyển nhượng. Bởi vì việc thực hiện dựa trên những toán tử đó và toán tử nhị phân chỉ có hai toán hạng, nên nhiều mục tiêu không bao giờ được bao gồm trong bản gốc implementation proposal.
Bạn sẽ phải chỉ cần áp dụng các bài tập riêng biệt:
x -= 1
y -= 2
hoặc, nếu bạn thực sự, thực sự muốn có được phức tạp, sử dụng các mô-đun operator
và zip()
để áp dụng operator.isub
để các kết hợp (thông qua itertools.starmap()
, sau đó sử dụng phân tuple:
from operator import sub
from itertools import starmap
x, y = starmap(operator.isub, zip((x, y), (1, 2)))
nơi isub
sẽ đảm bảo rằng móc đúng được gọi là cho phép tại chỗ trừ với nhiều loại có thể thay đổi thứ hỗ trợ nó.
hoặc, nếu bạn đang thao tác loại không hỗ trợ thao tác tại chỗ, sử dụng một biểu thức máy phát điện cũng đủ:
x, y = (val - delta for val, delta in zip((x, y), (1, 2)))