2016-01-09 17 views
7

Có thể gán giá trị và tăng giá trị được gán trên cùng một dòng bằng Python không?Chỉ định và tăng giá trị trên một dòng

Something như thế này:

x = 1 
a = x 
b = (x += 1) 
c = (x += 1) 

print a 
print b 
print c 

>>> 1 
>>> 2 
>>> 3 

Edit: tôi cần nó trong một bối cảnh mà tôi đang tạo ra một bảng tính Excel:

col = row = 1 
ws.cell(row=row, column=col).value = "A cell value" 
ws.cell(row=row, column=(col += 1)).value = "Another cell value" 
ws.cell(row=row, column=(col += 1)).value = "Another cell value" 

Chỉnh sửa 2: Giải pháp: Không thể, nhưng tôi đã tạo một bản sửa lỗi dễ dàng:

col = row = 1 

def increment_one(): 
    global col 
    col += 1 
    return col 

ws.cell(row=row, column=col).value = "A cell value" 
ws.cell(row=row, column=increment_one()).value = "Another cell value" 
ws.cell(row=row, column=increment_one()).value = "Another cell value" 

Trả lời

7

Không thể thực hiện điều đó bằng Python.

Assignments (hoặc augmented assignments) là các tuyên bố và như vậy có thể không xuất hiện ở bên phải của một nhiệm vụ khác. Bạn chỉ có thể chỉ định các biểu thức cho các biến.

Lý do khiến điều này có nhiều khả năng tránh nhầm lẫn với các tác dụng phụ dễ gây ra ở các ngôn ngữ khác hỗ trợ điều này.

Tuy nhiên, các bài tập bình thường hỗ trợ nhiều mục tiêu, vì vậy bạn có thể gán cùng một biểu thức cho nhiều biến. Điều này tất nhiên vẫn chỉ cho phép bạn có một biểu thức duy nhất ở phía bên phải (vẫn không có tuyên bố). Trong trường hợp của bạn, vì bạn muốn bx để kết thúc với cùng một giá trị, bạn có thể viết nó như thế này:

b = x = x + 1 
c = x = x + 1 

Lưu ý rằng kể từ khi bạn đang làm x = x + 1 bạn không còn sử dụng một bài tập tăng cường và như như vậy có thể có hiệu ứng khác nhau đối với một số loại (không phải cho số nguyên mặc dù).

3

Bạn có thể thực hiện bằng chức năng, ở đây tôi sử dụng hàm lambda. Không có tương đương python chính xác của ++x hoặc x++ trong c.

inc =lambda t: t+1 
x = 1 
a = x 
b,x=inc(x),x+1 
c,x = inc(x),x+1 

print a 
print b 
print c 
+1

Không chắc chắn lý do bạn muốn có chức năng ở đó. Mã này tương đương với 'b, x = x + 1, x + 1' – poke

+0

@poke Đúng vậy. Tôi đã viết điều đầu tiên tôi nghĩ đến. Các chức năng có thể được sử dụng cho một số hoạt động phức tạp khác nếu cần thiết. – wolfsgang

4

Không đẹp lắm nhưng bạn có thể làm điều gì đó như thế này.

x = 1 
a = x 
x = b = x+1 
x = c = x+1 

>>> print a,b,c 
>>> 1,2,3 

>>>print id(a),id(b),id(c),id(x) 
>>>31098952 31098928 31098904 31098904 
Các vấn đề liên quan