当前位置: 首页 > 面试题库 >

从字符串创建函数对象

樊博雅
2023-03-14
问题内容

问题:有没有办法使用字符串在python中 创建函数对象

信息:我正在一个项目中,该项目将数据存储在sqlite3服务器后端中。没什么可疯狂的。DAL类通常是通过代码生成来完成的,因为代码是如此平凡。但这给了我一个主意。在python中找不到属性时,如果定义函数__getattr__,它将在错误之前调用该函数。因此,我通过解析器和逻辑树来计算它的方式可以动态生成第一次调用时所需的代码,然后将函数对象另存为本地属性。例如:

DAL.getAll()

#getAll() not found, call __getattr__

DAL.__getattr__(self,attrib)#in this case attrib = getAll

##parser logic magic takes place here and I end up with a string for a new function

##convert string to function

DAL.getAll = newFunc

return newFunc

我已经尝试过编译功能,但是exec和eval在能够完成这种壮举方面远非令人满意。我需要允许多行功能的东西。除了那些不涉及将其写入磁盘的方法之外,还有其他方法可以做到这一点吗?再一次,我试图
动态地 创建一个 函数对象

PS:是的,我知道这存在可怕的安全性和稳定性问题。是的,我知道这是一种极其低效的方法。我关心的?没有。这是概念的证明。“
python可以这样做吗?它可以动态创建 函数对象 吗?”
我想知道的是这,而不是一些更高级的选择。(尽管在回答了当前问题后可以随意使用其他替代方法)


问题答案:

下面将您定义的符号放在字典的字符串中d

d = {}
exec "def f(x): return x" in d

现在d['f']是一个函数对象。如果要在字符串代码中使用程序中的变量,可以通过d以下方式发送:

d = {'a':7}
exec "def f(x): return x + a" in d

现在d['f']是一个动态绑定到的函数对象d['a']。更改时d['a'],将更改的输出d['f']()



 类似资料:
  • 问题内容: 我在PostgreSQL中有一个表,其中包含: 是类型,它包含具有正确顺序的该行的父记录列表。 家长:然后再 如何编写一个查询,该查询对于任何给定的ID都会生成其父母姓名的字符串? 例如: :。 :。 :。 编辑: 如果可能的话,我希望请求的ID总是会出现。 :。 :。 :。 :。 问题答案: 您可以结合使用诸如generate_subscripts和array之类的多项操作来获得结果

  • 问题内容: 我有从外部应用程序获取数据的Java应用程序。传入的JSON以字符串形式。我想解析该Strings并创建BSON对象。 不幸的是,我在Java的BSON实现中找不到用于此的API。 我是否像GSON这样使用了外部解析器? 问题答案: 最简单的方法似乎是使用JSON库将JSON字符串解析为,然后使用方法将这些值放入。

  • 在这个问题之前,我先要说明一个事实,那就是我学习编程才一个月,而这个学校的作业却把我难住了。具体地说,它是摩尔斯电码到英语翻译器(反之亦然)...这是我被困住的部分:

  • 问题内容: 我有一个包含多个子节点的大HTML字符串。 是否可以使用此字符串构造 jQuery DOM对象? 我试过了,但它只返回一个包含所有单个节点的数组。 试图获得一个我可以使用.find()函数的元素。 问题答案: 更新: 从jQuery 1.8开始,我们可以使用$.parseHTML,它将HTML字符串解析为DOM节点数组。例如: 这段代码中发生了什么: 是DOM中不存在的伪造品 作为孩子

  • 问题内容: 我有一个字符串形式: 依此类推(长度会有所不同)。由此创建字典的最简单方法是什么? 我知道我可以拆分,但是我无法获得正确的语法。如果我分开,那么我如何将这两个部分结合在一起? 对此进行迭代似乎很痛苦。 问题答案: 编辑:下一个解决方案是当您想要将值作为整数,我认为这是您想要的。

  • 问题内容: 这是一个非常基本的问题。但是我无法在Java文档中找到答案,也无法对其进行测试,因为我不知道这种方法是否存在。 我可能会收到一个URL字符串,可能是 要么 然后我会得到可能以开头的资源路径,或者就像 我正在看课,可以处理第一部分,即获取hostURL使其成为HTTPS或HTTP请求。问题是附加资源路径。我必须手动检查它的第一个字母是否存在。我想知道此功能是否已经在某个类中。 问题答案: