首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中的自动代码生成

python中的自动代码生成
EN

Stack Overflow用户
提问于 2015-02-18 11:59:30
回答 2查看 3K关注 0票数 2

我需要从python调用C dll中的函数。所以我需要编写格式的函数

代码语言:javascript
复制
def funcA(self):
    ans = ctypes.uint64()
    self.driver.getA(ctypes.byref(ans))
    return ans

现在我必须写同样的代码大约30次,唯一的区别是函数的名称称为funcA,funcB,funcC,类似的dll函数getA,getB,getC,以及返回值的类型。

一般情况下,我只想有个小弟弟

代码语言:javascript
复制
funcs = { 'A':'uint64', 'B':'bool'}

并自动生成函数

funcA和funcB,除了类型和变量名之外,其结构几乎与顶部显示的相同。我猜会有一些图书馆。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-18 12:13:40

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

代码语言:javascript
复制
funcs = { 'A':ctypes.uint64, 'B':bool }

然后:

代码语言:javascript
复制
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循环,然后:

代码语言:javascript
复制
funcA = make_func('A', ctypes.uint64)
funcB = make_func('B', bool)
票数 3
EN

Stack Overflow用户

发布于 2015-02-18 12:08:32

如果您想通过代码生成来完成这一任务,您只需为该函数创建一些模板,然后使用str.format来填充字典中的参数。

代码语言:javascript
复制
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

只需将输出输送到某个文件,或直接将其写入文件,而不是打印。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28583138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档