python - 使用 exec() 从字符串运行 lambda 函数
问题描述
我希望能够从 txt 文件中引入 lambda 函数,并让它能够像正常的代码部分一样运行。
chain = "What has to be broken up"
reduction = 'lambda chain: chain[0:8]'
x = exec(reduction)
print(x) #only prints out 'None'
print(exec(x = reduction)) #causes error
print(exec(reduction)) #prints out 'None'
我希望输出是字符串链的前 8 个字符,“有什么”。我怎样才能使这项工作来运行该功能?
解决方案
要运行一个函数,你必须()
在它之后使用。
要获取字符串中表达式的值,您需要使用eval()
,而不是exec()
。请参阅eval、exec 和 compile 之间有什么区别?.
由于您的 lambda 函数有一个参数,因此您需要在调用它时给它一个参数。
chain = "What has to be broken up"
reduction = 'lambda c: c[0:8]'
x = eval(reduction)(chain)
print(x)
如果你不想给它一个参数,你应该取出参数。但是您仍然需要提供一个空的参数列表。
chain = "What has to be broken up"
reduction = 'lambda: chain[0:8]'
x = eval(reduction)()
print(x)
推荐阅读
- python - 将代码复制到同一程序但无法正常工作?切片索引必须是整数或 None 或具有 __index__ 方法
- ruby-on-rails - 使用acts_as votabable gem 来表示喜欢,并希望在用户喜欢后将心形颜色永久更改为红色
- c# - FileHelper 读取 TXT 文件
- python - Grouby 函数创建 2 个新列
- angular - 带有模式的 Angular Material url 验证
- django - 在setting.py Django中保存postgresql服务器信息时出现语法错误
- pyside - 在 QGraphicsView 中禁用橡皮筋选择,并且只有单个项目选择
- javascript - 如何在 d3 中重命名函数 linear()?
- prestashop - 在 Prestashop 1.7 中将 meta_tags meta_description 和 meta_name 更改为扩展 page.tpl 的自定义页面
- ios - 有什么方法可以创建电子邮件的常用方法(例如:- 在应用程序中联系我们)