包含任意用户定义的函数的最佳方法是什么?

时间:2016-01-21 14:38:31

标签: python

如果允许用户为函数调用和函数本身指定语法,那么导入函数的最佳方法是什么?我在当前的实现中使用execfile,但是有更好的方法吗?

这是一个奇怪的应用程序,但我希望能够方便地访问我通过可以从命令行调用的python脚本编写的库。用户在csv文件中定义了一个简单的语法,并且可以选择定义从我的库(mylibrary)访问函数的python函数。

例如,这里是csv文件内容(“userstrings.csv”):

x,"1"
y,"2"
z,"func({x},{y})"

然后,用户可以在“userdefined.py”中定义func

def func(x,y):
    return mylibrary.add(x,y)

主程序看起来像这样:

import csv
from collections import OrderedDict
import operator as mylibrary # this would be import mylibrary

execfile('userdefined.py')

class foo:

    def __init__(self,filename):
        with open(filename) as f:
            strings = [string for string in csv.reader(f)]
        self.strings = strings

    def execute(self):
        output = OrderedDict()
        for label, string in self.strings:
            output[label] = eval(string.format(**output))
        return output

bar = foo('userstrings.csv')

print bar.execute()

这将输出

OrderedDict([('x', 1), ('y', 2), ('z', 3)])

为了制作一个可重复的示例,我刚刚将mylibrary定义为上面的operator库,但通常为import mylibrary

有没有比调用execfile更好的方法来在这样的应用程序中创建用户定义的函数?

1 个答案:

答案 0 :(得分:1)

只需导入它。

try:
    import userdefined
except ImportError:
    pass

用户只需将文件放在Python的搜索路径中,您可以从脚本中添加该文件。