键盘中断复制d安全吗

2024-04-26 06:27:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个循环,在每次迭代中我(重新)计算一个长向量值:

try:
    while(1):
        long_vec = recalculate( long_vec )
        last_vec = long_vec.copy()
except KeyboardInterrupt:
    print last_vec

long_veclast_vec是numpy数组。你知道吗

我的问题是:我能确定当我按下CTRL+C时,它不会破坏copy()函数,并且last_vec不会破坏吗?你知道吗


Tags: 函数numpy数组longlastprintctrlcopy
2条回答

您可以确保使用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 =)的后续赋值。你知道吗

我相信这个赋值在CPython中是原子的(也就是说,它需要一条字节码指令)。你知道吗

换句话说,last_vec既可以包含上一次迭代的值,也可以包含当前迭代的复制值。按Ctrl-C不能导致last_vec包含新值的部分副本。你知道吗

相关问题 更多 >