如果允许用户为函数调用和函数本身指定语法,那么导入函数的最佳方法是什么?我在当前的实现中使用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
更好的方法来在这样的应用程序中创建用户定义的函数?
答案 0 :(得分:1)
只需导入它。
try:
import userdefined
except ImportError:
pass
用户只需将文件放在Python的搜索路径中,您可以从脚本中添加该文件。