以相同的名称调用不同的函数,具有相同的操作

2024-10-05 10:05:41 发布

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

我想知道如何在已经运行的代码中添加新行(甚至可以是一个简单的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],如您所见。 所以问题是,在第一次调用之后,可以对代码单元格进行何种类型的添加或更改,以获得预期的输出


Tags: 代码infodatamaindefstepsimplecommand
1条回答
网友
1楼 · 发布于 2024-10-05 10:05:41

在一次运行中运行、导入和更改相同的函数和程序,会将原始创建的main()保留在计算机内存中。为了正确刷新导入,您需要使用importlib模块中的reload()

from importlib import reload
import os
def applyCommand(data, command):
    with open('simple_macro.py', 'w') as file:
        file.write(command)
        print('[INFO] simple macro has been written- step 1 ✓.')

    import simple_macro
    reload(simple_macro)
    with open('simple_macro.py') as file:
        print(file.read())
    print('[INFO] simple macro has been imported - step 2 ✓.')
    
    data = simple_macro.main(data)
    print('[INFO] data has been updated - step 3 ✓.')
    
    os.remove('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 ✓.
def main(data):
    return data[:5]
[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 ✓.
def main(data):
    return data[0]
[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

我添加了对simple_宏的实际更改的打印

相关问题 更多 >

    热门问题