2024-04-26 06:27:46 发布
网友
我有一个循环,在每次迭代中我(重新)计算一个长向量值:
try: while(1): long_vec = recalculate( long_vec ) last_vec = long_vec.copy() except KeyboardInterrupt: print last_vec
long_vec和last_vec是numpy数组。你知道吗
long_vec
last_vec
我的问题是:我能确定当我按下CTRL+C时,它不会破坏copy()函数,并且last_vec不会破坏吗?你知道吗
您可以确保使用finally块复制它:
finally
while True: try: long_vec = recalculate(long_vec) except KeyboardInterrupt: print long_vec # last_vec == long_vec in your example finally: # does not make sense, since the program halts after that: last_vec = long_vec.copy()
重要的不是.copy(),而是引用(last_vec =)的后续赋值。你知道吗
.copy()
last_vec =
我相信这个赋值在CPython中是原子的(也就是说,它需要一条字节码指令)。你知道吗
换句话说,last_vec既可以包含上一次迭代的值,也可以包含当前迭代的复制值。按Ctrl-C不能导致last_vec包含新值的部分副本。你知道吗
您可以确保使用
finally
块复制它:重要的不是
.copy()
,而是引用(last_vec =
)的后续赋值。你知道吗我相信这个赋值在CPython中是原子的(也就是说,它需要一条字节码指令)。你知道吗
换句话说,
last_vec
既可以包含上一次迭代的值,也可以包含当前迭代的复制值。按Ctrl-C不能导致last_vec
包含新值的部分副本。你知道吗相关问题 更多 >
编程相关推荐