在一行上分配和增加值

时间:2016-01-09 13:19:15

标签: python

是否可以在Python中为同一行分配值并增加指定值?

这样的事情:

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

print a
print b
print c

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

修改 我需要在我创建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"

编辑2:解决方案: 这是不可能的,但我已经创建了一个简单的解决方案:

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"

6 个答案:

答案 0 :(得分:7)

不,这在Python中是不可能的。

Assignments(或augmented assignments)是陈述,因此可能不会出现在另一项作业的右侧。您只能将表达式分配给变量。

这样做的原因很可能是避免因支持此问题的其他语言容易引起的副作用造成的混淆。

但是,正常分配确实支持多个目标,因此您可以将同一表达式分配给多个变量。这当然仍然只允许你在右侧有一个表达式(仍然没有声明)。在您的情况下,由于您希望bx以相同的值结束,您可以这样写:

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

请注意,由于您正在执行x = x + 1,因此您不再使用扩充分配,因此对某些类型可能会产生不同的效果(但不是对于整数)。

答案 1 :(得分:4)

不是很漂亮,但你可以这样做。

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

答案 2 :(得分:3)

你可以使用函数来完成,这里我使用lambda函数。 c中没有与++xx++完全相同的python。

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

答案 3 :(得分:1)

从Python 3.8开始,您可以使用walrus operator中引入的PEP-572。该运算符创建一个assignment expression。因此,您可以在返回新值的同时为变量分配新值:

>>> print(f"{(x := 1)}")
1
>>> x
1
>>> print(f"{(x := x+1)}")
2
>>> x
2
>>> b = (x := x+1)
>>> b, x
(3, 3)

在您的问题中,这将起作用:

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

答案 4 :(得分:0)

您可以使用rangeiternext

from openpyxl import Workbook

wb = Workbook()
ws = wb.active

col = row = 1
iter_int = iter(range(col, col + 100))

ws.cell(row=row, column=next(iter_int)).value = "A cell value"
ws.cell(row=row, column=next(iter_int)).value = "Another cell value"
ws.cell(row=row, column=next(iter_int)).value = "Another cell value"

wb.save("cell_values.xlsx")

答案 5 :(得分:0)

* 由编辑到问题中的 OP 自行回答:


这是不可能的,但我已经创建了一个简单的修复:

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"