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

Calling different functions by same name, having same action

我想知道如何向已经 运行ning 代码添加新行(它甚至可以是一个简单的 while 循环)和 运行 它。但是这种创建和导入 class 或函数的方式总是 运行 是第一个添加的代码行,即使您更改了函数并再次导入它也是如此。 我尝试添加 del main,并将行 data = main(data) 替换为 data = main(data).copy(),但都没有给出任何结果。没有出现任何错误或日志,我在步骤中添加了信息以供理解。

编码:

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()

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_macro 所做实际更改的打印。