gpt4 book ai didi

python - python-2.7 timeit函数崩溃

转载 作者:行者123 更新时间:2023-12-03 17:44:36 25 4
gpt4 key购买 nike

由于某些原因,Python-2.7 timeit函数在以下示例中崩溃:

a,b = 0,0
timeit a=b # ok: 10000000 loops, best of 3: 50.9 ns per loop
timeit if a==a+b: pass # ok: 1000000 loops, best of 3: 129 ns per loop
timeit a=a+b # crashes!

Traceback (most recent call last):
UnboundLocalError: local variable 'a' referenced before assignment

显然,我可以分配给 a(第一个示例),可以将 aa+b(第二个示例)进行比较,所以为什么我不能运行第三个示例?当然,被计时的语句本身听起来很完美...

最佳答案

timeit实际上是一个函数,但是某些python解释器可以允许您将其与的语法一起使用语句的语法,例如IPython,但实际上它是一个函数。

因此,在a==a+b中,它实际上将ab视为全局变量,因此没有错误,因为它可以获取全局ab

但是在a=a+b中,它将a视为局部变量,而b仍然是全局变量,因此会引发错误,因为python一旦在函数内部看到赋值,就会将其视为局部变量。

它等效于:

In [7]: def func1():
a==a+b
...:

In [8]: def func():
a=a+b
...:

In [9]: dis.dis(func1)
2 0 LOAD_GLOBAL 0 (a)
3 LOAD_GLOBAL 0 (a)
6 LOAD_GLOBAL 1 (b)
9 BINARY_ADD
10 COMPARE_OP 2 (==)
13 POP_TOP
14 LOAD_CONST 0 (None)
17 RETURN_VALUE

In [10]: dis.dis(func)
2 0 LOAD_FAST 0 (a) # but there's nothing to load, so Error
3 LOAD_GLOBAL 0 (b)
6 BINARY_ADD
7 STORE_FAST 0 (a)
10 LOAD_CONST 0 (None)
13 RETURN_VALUE


In [11]: func() #same error as yours
---------------------------------------------------------------------------
UnboundLocalError Traceback (most recent call last)

UnboundLocalError: local variable 'a' referenced before assignment

关于python - python-2.7 timeit函数崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13974280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com