我需要从python调用C dll中的函数。所以我需要编写格式的函数
def funcA(self):
ans = ctypes.uint64()
self.driver.getA(ctypes.byref(ans))
return ans现在我必须写同样的代码大约30次,唯一的区别是函数的名称称为funcA,funcB,funcC,类似的dll函数getA,getB,getC,以及返回值的类型。
一般情况下,我只想有个小弟弟
funcs = { 'A':'uint64', 'B':'bool'}并自动生成函数
funcA和funcB,除了类型和变量名之外,其结构几乎与顶部显示的相同。我猜会有一些图书馆。
发布于 2015-02-18 12:13:40
为什么要使用字符串而不是类型本身?
funcs = { 'A':ctypes.uint64, 'B':bool }然后:
def make_func(name, ctype):
def func(self):
ans = ctype()
getattr(self.driver, 'get'+name)(ctypes.byref(ans))
return ans
func.__name__ = 'func'+name
return func
for a, b in funcs.items():
globals()['func'+a] = make_func(a, b)或者丢弃dict和for循环,然后:
funcA = make_func('A', ctypes.uint64)
funcB = make_func('B', bool)发布于 2015-02-18 12:08:32
如果您想通过代码生成来完成这一任务,您只需为该函数创建一些模板,然后使用str.format来填充字典中的参数。
template = """def func{0}(self):
ans = ctypes.{1}()
self.driver.get{0}(ctypes.byref(ans))
return ans
"""
funcs = { 'A':'uint64', 'B':'bool'}
for a, b in funcs.items():
function = template.format(a, b)
print function只需将输出输送到某个文件,或直接将其写入文件,而不是打印。
https://stackoverflow.com/questions/28583138
复制相似问题