我想知道如何在已经运行的代码中添加新行(甚至可以是一个简单的while循环)并运行它。但是,这种创建和导入类或函数的方法始终会运行第一行添加的代码,即使您更改了函数并再次导入了它。
我尝试添加del main
,并用data = main(data).copy()
替换行data = main(data)
,但都没有给出任何结果。没有出现任何错误或日志,我在步骤中添加了信息以便于理解
代码:
def applyCommand(data, command):
with open('/$PATH/simple_macro.py', 'w') as file:
file.write(command)
print('[INFO] simple macro has been written- step 1 ✓.')
from simple_macro import main
print('[INFO] simple macro has been imported - step 2 ✓.')
data = main(data)
print('[INFO] data has been updated - step 3 ✓.')
from os import remove
remove('/$PATH/simple_macro.py')
print('[INFO] simple macro file has been deleted - step 4 ✓.')
return data
data = list(range(10))
command = "def main(data):\n return data[:5]"
data = applyCommand(data, command)
print("Updated data:", data)
commandTwo = "def main(data):\n return data[0]"
data = applyCommand(data, commandTwo)
print("Updated data:", data)
输出:
[INFO] simple macro has been written- step 1 ✓.
[INFO] simple macro has been imported - step 2 ✓.
[INFO] data has been updated - step 3 ✓.
[INFO] simple macro file has been deleted - step 4 ✓.
Updated data: [0, 1, 2, 3, 4]
[INFO] simple macro has been written- step 1 ✓.
[INFO] simple macro has been imported - step 2 ✓.
[INFO] data has been updated - step 3 ✓.
[INFO] simple macro file has been deleted - step 4 ✓.
Updated data: [0, 1, 2, 3, 4]
第一部分生成正确的预期输出,但第二部分的预期输出只是0
,但实际输出是[0, 1, 2, 3, 4]
,如您所见。
所以问题是,在第一次调用之后,可以对代码单元格进行何种类型的添加或更改,以获得预期的输出
在一次运行中运行、导入和更改相同的函数和程序,会将原始创建的main()保留在计算机内存中。为了正确刷新导入,您需要使用importlib模块中的
reload()
:结果:
我添加了对simple_宏的实际更改的打印
相关问题 更多 >
编程相关推荐