在Python中动态生成/创建函数

在Python中动态生成/创建函数,python,Python,我试图用Python动态创建一个函数并执行它。这就是我到目前为止所做的: def ExecuteScript(saveFile, updatedSaveFile, codeSnippet ): decryptedData, jsonData = FixSave.GetDataFromSaveFile(saveFile) FixSave.Save(decryptedData, jsonData, updatedSaveFile + "_original")

我试图用Python动态创建一个函数并执行它。这就是我到目前为止所做的:

def ExecuteScript(saveFile, updatedSaveFile, codeSnippet ):          
    decryptedData, jsonData = FixSave.GetDataFromSaveFile(saveFile)
    FixSave.Save(decryptedData, jsonData, updatedSaveFile + "_original")

    dynamicFunction = ""
    dynamicFunction += "def execCodeSippet(jsonData):\n"
    for line in codeSnippet.splitlines():
        line = "    " + line.strip() + "\n"
        dynamicFunction += line

    dynamicFunction += "    return jsonData\n"

    #execCodeSnippetD = {}
    exec(dynamicFunction) # in execCodeSnippetD
    #print(execCodeSnippetD)
    #exec("print(execCodeSnippetD)")

    jsonData = execCodeSnippet(jsonData)

    FixSave.Save(decryptedData, jsonData, updatedSaveFile)
我读到exec应该在当前名称空间中创建函数,但它不会。接下来我需要做什么? 我试图在字典中执行它,但它返回一个空的

其思想是让用户定义Json文件中修改的值

编辑: 我也试过了

    module = imp.new_module('codesnippets')
    exec(dynamicFunction) in module.__dict__

但我仍然得到:“module”对象没有属性“execcodesippet”

,下面是我如何做到这一点的(Python 3):


下面是我如何做到这一点的(Python 3):


你能解释一下你的实际目标是什么吗?几乎可以肯定,有比从文本动态创建函数更好的方法。@DeanFenster我尝试过这个方法:module=imp.new\u module('myfunctions'))但我仍然得到:AttributeError:“module”对象没有属性“execCodeSnippet”@DanielRoseman有一个脚本,每次都必须手动修改该脚本,以更改可以包含100+k行的大型Json文件的不同参数。我试图把它放在GUI中。它可能不太实用,但至少可以避免用户使用多个不同的应用程序,包括IDE。可能重复的。你能解释一下你的实际目标是什么吗?几乎可以肯定,有比从文本动态创建函数更好的方法。@DeanFenster我尝试过这个方法:module=imp.new\u module('myfunctions'))但我仍然得到:AttributeError:“module”对象没有属性“execCodeSnippet”@DanielRoseman有一个脚本,每次都必须手动修改该脚本,以更改可以包含100+k行的大型Json文件的不同参数。我试图把它放在GUI中。它可能不太实用,但至少可以避免用户使用多个不同的应用程序,包括IDE。
def ExecuteScript(saveFile, updatedSaveFile, codeSnippet ):
    decryptedData, jsonData = FixSave.GetDataFromSaveFile(saveFile)
    FixSave.Save(decryptedData, jsonData, updatedSaveFile + "_original")

    dynamicFunction = ""
    dynamicFunction += "def execCodeSnippet(json_data):\n"
    for line in codeSnippet.splitlines():
        line = "    " + line.strip() + "\n"
        dynamicFunction += line
    dynamicFunction += "    return json_data\n"

    module = imp.new_module('codesnippets')
    exec(dynamicFunction, module.__dict__)

    jsonDataFixed = module.execCodeSnippet(jsonData)

    FixSave.Save(decryptedData, jsonDataFixed, updatedSaveFile)