python - 以相同的名称调用不同的函数,具有相同的 Action

标签 python function class import

我想知道如何向已运行的代码添加新行(它甚至可以是一个简单的 while 循环)并运行它。但是这种创建和导入类或函数的方法总是运行添加的第一行代码,即使您更改了函数并再次导入它也是如此。 我尝试添加 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 所做的实际更改的打印。

关于python - 以相同的名称调用不同的函数,具有相同的 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68649144/

相关文章:

python - 根据用户输入动态更改标签文本

Javascript - 检查某个索引是否在数组中具有特定值

c - 使用指针时的错误和警告消息

javascript - "function anonymous"在 Javascript 中是什么意思?

C++事件模板类

javascript - JS 中基于 Mixin 和 Trait 的组合

python - 从 Python 文件中读取包含整数的行?

python - 在 CSV 中的每个单元格上迭代语言检测代码并在下一列中打印结果

python - 无法在 django-allauth 中使用单元测试登录

c++ - 使用另一个类的变量