关于 类 和赋值的 Python 执行时间
Execution time in Python regarding classes and assigning values
我尝试了有关更改变量值的不同方式的方法,并遇到了一些我没想到的事情。我原以为改变值本身,而不是将新的 class 分配给变量会更快。谁能给我解释一下为什么 A 比 B 快?
from time import time
class A:
def __init__(self):
self.a = 0
def __add__(self, other):
return self.a + other
def __str__(self):
return str(self.a)
class B:
def __init__(self):
self.b = 0
def __add__(self, other):
self.b += other
def __str__(self):
return str(self.b)
a = A()
b = B()
s = time()
for _ in range(10**6):
a = a + 1
print(a, time()-s, " seconds")
s = time()
for _ in range(10**6):
b + 1
print(b, time()-s, " seconds")
输出:
1000000 0.12671232223510742 seconds
1000000 0.2434854507446289 seconds
编辑:添加代码。
s = time()
for i in range(10**6):
a = a + i
print(a, time()-s, " seconds")
s = time()
for i in range(10**6):
b + i
print(b, time()-s, " seconds")
输出:
499999500000 0.15620923042297363 seconds
499999500000 0.2812356948852539 seconds
我不确定您的代码是否按您的预期运行。方法 A._add_
仅使用参数整数 1 调用一次。在将此 1 分配给变量 a
之后,从这一刻起,循环中只会添加整数。
如果我们更改代码以便在每次迭代中调用该方法,我们将获得几乎相同的时间。
s = time()
acc = 0
for _ in range(10**6):
acc += a + 1
print(acc, time()-s, " seconds")
s = time()
for _ in range(10**6):
b + 1
print(b, time()-s, " seconds")
结果:
1000000 0.14543867111206055 seconds
1000000 0.14631319046020508 seconds
我尝试了有关更改变量值的不同方式的方法,并遇到了一些我没想到的事情。我原以为改变值本身,而不是将新的 class 分配给变量会更快。谁能给我解释一下为什么 A 比 B 快?
from time import time
class A:
def __init__(self):
self.a = 0
def __add__(self, other):
return self.a + other
def __str__(self):
return str(self.a)
class B:
def __init__(self):
self.b = 0
def __add__(self, other):
self.b += other
def __str__(self):
return str(self.b)
a = A()
b = B()
s = time()
for _ in range(10**6):
a = a + 1
print(a, time()-s, " seconds")
s = time()
for _ in range(10**6):
b + 1
print(b, time()-s, " seconds")
输出:
1000000 0.12671232223510742 seconds
1000000 0.2434854507446289 seconds
编辑:添加代码。
s = time()
for i in range(10**6):
a = a + i
print(a, time()-s, " seconds")
s = time()
for i in range(10**6):
b + i
print(b, time()-s, " seconds")
输出:
499999500000 0.15620923042297363 seconds
499999500000 0.2812356948852539 seconds
我不确定您的代码是否按您的预期运行。方法 A._add_
仅使用参数整数 1 调用一次。在将此 1 分配给变量 a
之后,从这一刻起,循环中只会添加整数。
如果我们更改代码以便在每次迭代中调用该方法,我们将获得几乎相同的时间。
s = time()
acc = 0
for _ in range(10**6):
acc += a + 1
print(acc, time()-s, " seconds")
s = time()
for _ in range(10**6):
b + 1
print(b, time()-s, " seconds")
结果:
1000000 0.14543867111206055 seconds
1000000 0.14631319046020508 seconds