在python中自动生成代码

问题描述 投票:2回答:3

我需要从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 ,除了类型和变量名外,结构和上面所示的几乎一样。我猜想应该有一些函数库。

python code-generation
3个回答
3
投票

为什么要使用字符串而不是类型本身?

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)

2
投票

如果你想通过代码生成来实现,你可以为函数创建一些模板,然后使用 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

只需将输出结果用管道传送到某个文件,或者直接写到文件中,而不是打印。

© www.soinside.com 2019 - 2024. All rights reserved.