Python:当你只有方法的字符串名称时,如何调用方法?

2024-01-01

这是用于 JSON API 的。 我不想拥有:

if method_str == 'method_1':
    method_1()

if method_str == 'method_2':
    method_2()

由于显而易见的原因,这不是最佳的。我将如何以可重用的方式使用映射字符串到这样的方法(另请注意,我需要将参数传递给被调用的函数)。

这是一个例子:

传入的 JSON:

{
    'method': 'say_something',
    'args': [
        135487,
        'a_465cc1'
    ]
    'kwargs': {
        'message': 'Hello World',
        'volume': 'Loud'
    }
}

# JSON would be turned into Python with Python's built in json module.

结果调用:

# Either this
say_something(135487, 'a_465cc1', message='Hello World', volume='Loud')

# Or this (this is more preferable of course)
say_something(*args, **kwargs)

对于实例的方法,使用getattr

>>> class MyClass(object):
...  def sayhello(self):
...   print "Hello World!"
... 
>>> m=MyClass()
>>> getattr(m,"sayhello")()
Hello World!
>>> 

对于函数,您可以在全局字典中查找

>>> def sayhello():
...  print "Hello World!"
... 
>>> globals().get("sayhello")()
Hello World!

在这种情况下,由于没有调用函数prove_riemann_hypothesis默认函数(sayhello) 用来

>>> globals().get("prove_riemann_hypothesis", sayhello)()
Hello World!

The problem通过这种方法,您可以与其中的其他内容共享名称空间。你可能想要防止不应该的 json 调用方法。一个好方法是像这样装饰你的函数

>>> json_functions={}
>>> def make_available_to_json(f):
...  json_functions[f.__name__]=f
...  return f
...
>>> @make_available_to_json
... def sayhello():
...  print "Hello World!"
...
>>> json_functions.get("sayhello")()
Hello World!
>>> json_functions["sayhello"]()
Hello World!
>>> json_functions.get("prove_riemann_hypothesis", sayhello)()
Hello World!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:当你只有方法的字符串名称时,如何调用方法? 的相关文章

  • 如何在 kubernetes 上使多个 pod 相互通信

    我是 Kubernetes 新手 我正在尝试通过 microk8s 将应用程序部署到 Kubernetes 该应用程序包含Python Flask后端 Angular前端 Redis和MySQL数据库 我将映像部署在多个 Pod 中 状态显
  • 如何在不破坏默认行为的情况下覆盖 __getattr__ ?

    我如何覆盖 getattr https docs python org 3 reference datamodel html object getattr 类的方法而不破坏默认行为 压倒一切 getattr 应该没事 getattr 仅作为
  • S3 选择检索 CSV 中的标头

    我尝试使用以下代码从存储在 S 存储桶中的 CSV 中获取记录子集 s3 boto3 client s3 bucket bucket file name file sql stmt SELECT S FROM s3object S LIMI
  • __getitem__、__setitem__ 如何处理切片?

    我正在运行 Python 2 7 10 我需要拦截列表中的更改 我所说的 更改 是指在浅层意义上修改列表的任何内容 如果列表由相同顺序的相同对象组成 则列表不会更改 无论这些对象的状态如何 否则 它会更改 我不需要找出来how列表已经改变
  • 使用Python进行图像识别[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个想法 就是我想识别图像中的字母 可能是 bmp或 jpg 例如 这是一个包含字母 S 的 bmp 图像 我想做的是使用Pyth
  • 将分布拟合到直方图

    I want to know the distribution of my data points so first I plotted the histogram of my data My histogram looks like th
  • 使用 AFNetworking 2.0 发布 JSON 数据

    我有一个 Web 脚本 它通过 HTTP POST 请求接受 JSON 字符串作为输入 我遇到过几个相同的 AFNetworking 1 x 示例 任何人都可以指出我或提供 AFNetworking 2 0 示例 以对使用格式化 JSON
  • 使用 Json.NET 序列化子类

    我正在尝试使用 Json NET 序列化子类 生成的 json 包含超类的序列化属性 但是not子类对象的属性 这似乎与我发现的一个问题有关这里就这样 https stackoverflow com q 5863496 498969 但必须
  • 如何将一串Python代码编译成一个可以调用函数的模块?

    在 Python 中 我有一串 Python 源代码 其中包含以下函数 mySrc def foo print foo def bar print bar 我想将这个字符串编译成某种形式类似模块的对象这样我就可以调用代码中包含的函数 这是我
  • 如何在 Python 中将 EXR 文件的 float16 转换为 uint8

    我正在使用 OpenEXR 读取 Python 中的 EXR 文件 我有带有半数据 float16 的 R G 和 B 通道 我尝试使用 Numpy 将数据从 float16 转换为 uint8 0 255 颜色 但没有成功 rCh get
  • 当我打印“查询”时获取 PY_VAR1

    我正在制作一个简单的网络抓取代码 当我尝试打印一个值时 它给了我其他东西 def PeopleSearch query SearchTerm query what is query print str query SearchTerm St
  • 为 REST API 编写单元测试的最佳方法是什么?

    在为 API 包装器编写单元测试时 我应该对 REST API 端点进行真正的调用 还是应该使用 mocl 响应来模拟成功和错误的调用 单元测试意味着只测试你的unit API 包装器 仅此而已 因此 不幸的是 您应该模拟整个 API 另一
  • 如何从外语线程调用Python函数(C++)

    我正在开发一个程序 使用 DirectShow 来抓取音频数据 媒体文件 DirectShow 使用线程将音频数据传递给回调 我的程序中的函数 然后我让该回调函数调用另一个函数 Python 中的函数 我使用 Boost Python 来包
  • 为什么 tesseract 无法从这个简单的图像中读取文本?

    我在 pytesseract 上阅读了大量的帖子 但我无法让它从一个简单的图像中读取文本 它返回一个空字符串 这是图像 我尝试过缩放它 灰度化它 调整对比度 阈值 模糊 以及其他帖子中所说的一切 但我的问题是我不知道 OCR 想要更好地工作
  • 在Python中打开网站框架或图像

    所以我对 python 相当熟练 并且经常使用 urllib2 和 Cookies 来实现网站自动化 我刚刚偶然发现了 webbrowser 模块 它可以在默认浏览器中打开一个网址 我想知道是否可以从该 url 中仅选择一个对象并打开它 具
  • 在哪里可以找到Python内置序列类型的时间和空间复杂度

    我一直无法找到此信息的来源 无法亲自查看 Python 源代码来确定这些对象是如何工作的 有谁知道我可以在网上找到这个吗 结帐时间复杂度 http wiki python org moin TimeComplexitypy dot org
  • 如何有效地计算另一列中每个元素的较大元素的数量?

    我有以下内容df name created utc 0 t1 cqug90j 1430438400 1 t1 cqug90k 1430438400 2 t1 cqug90z 1430438400 3 t1 cqug91c 143043840
  • 如何运行 Mike Bostock 的 D3 示例?

    我一直在尝试经营迈克博斯托克透视地球仪 http bl ocks org mbostock 6747043例如 但是如果您尝试在本地重现它 则对其 json 文件的引用是不正确的 问题来自于这行代码 d3 json mbostock raw
  • Chrome + 另一个进程:进程间通信比 HTTP/XHR 请求更快?

    我有一个进程 1 对视频流进行实时图像处理 我需要在 Chrome 中的 HTML 页面中渲染该视频 同一台计算机上的进程 2 在canvas or img or videoHTML5 元素 由于我有 1000x1000 像素 x 3 字节
  • 使用Python的线程模块调用ctypes函数比使用多处理更快?

    我一生都无法找出这个问题的答案 我编写了一个可以执行数百次繁重计算的脚本 我有一个绝妙的主意 将这些计算任务编写为 C 然后使用 Python 的 ctypes 与它们交互 我心想 我什至可以使用并行性进一步优化它 我最初的方法是使用线程

随机推荐

  • 分裂b+树中的节点

    我试图弄清楚当节点溢出时到底会发生什么 信息 在我的 b 树中 每个块有 4 个指针和 3 个数据部分 问题 我明白 当出现溢出时 我们会分成 2 个节点 每个节点有 2 个节点 键 并将中间值插入父节点 而不从子节点中删除 与 b 树不同
  • 获取列表列表中的最大值列表

    我有一个List
  • Python 字典包含编码值

    我有一个熊猫数据框oParameterData我使用 Hive ODBC 连接在 Hadoop 上构建了查询 我用它来填充一个名为的 Python 字典oParameter import pyodbc import pandas oConn
  • iOS - 如何在更改视图时停止背景音乐

    如何在改变视图时停止背景音乐 我没有任何线索 如果我按下一个按钮 将我带到一个新的视图 就会有新的背景音乐 但旧的背景音乐 无限循环 仍在继续 请帮忙 还请示例一些代码 这是我的 void viewDidLoad NSString path
  • 使用 PDO 获取插入和更新 ID

    我想得到mysql insert id使用 PDO 到目前为止 我还没有找到一个可以同时用于插入和更新的好例子 有人有一段完整的代码作为示例吗 If you need pdo gt lastInsertId 要返回刚刚更新的行的 id 如果
  • 下一次部署仅在 Amplify 上失败

    我尝试在 AWS Amplify 上部署 Next js 应用程序 但始终失败 构建在本地环境中运行得非常好 我什至成功地在 Vercel 上部署 但它只在放大上失败 我能够通过创建一个来部署 babelrc文件 但我正在寻找保留 SWC
  • 没有为与上下文路径 [/Struts2Test] 关联的名称空间 [/] 和操作名称 [login] 映射的操作

    我是 Struts2 的初学者 我知道这个问题在这里被问了很多次 但我试图解决它并在这里阅读了很多线程 花了 6 个小时 但仍然无法让它工作 确实需要更多建议 这是我的包裹 Struts2Test Struts2Test src tw co
  • TeamCity 提供静态 HTML 页面

    我正在寻找一种使用 TeamCity 提供一些静态 HTML 页面的方法 如果不是绝对必要的话 我不想为此设置 apache 有谁知道访问静态 HTML 内容的简单方法 或 URL 方案 我找到了以下插件 但它只在现有页面的某些位置插入 H
  • 从菜单中隐藏应用程序并在需要时显示

    我想从主菜单隐藏我的应用程序 当用户愿意时 他 她可以看到他们的应用程序 为了隐藏应用程序 我删除了启动器类别 现在应用程序被隐藏 但现在我不明白用户如何启动应用程序 我在某处读到 使用组合键 在 DialerPad 上 可以显示活动的主屏
  • perf stat 为每次运行提供不同数量的指令

    我对以下空程序进行了性能分析 include
  • 如何将 css 类添加到特定的 symfony2 表单选项?

    我可以使用 Javascript 做到这一点 但我想知道是否可以将 css 类添加到特定的 symfony2 表单选择 不是选择字段本身 而是单个选择 例如 我想将不同的 css 样式应用于 选择 内的各个 选项 标签 我只能找到一种方法来
  • 动态加载Extjs模块化应用程序

    我正在使用 Extjs5 开发一个大型客户端应用程序 每个模块上都有非常复杂的视图 我已经在 Extjs 中开发了应用程序 但它们都编译为单个 app js 文件 因此 根据所有应用程序模型中视图的复杂性 我估计应用程序的大小即使在编译后也
  • 使用 JUnit4 进行测试时,Spring @transactional 不会启动事务

    我有以下配置
  • 了解 jQuery 返回对象

    我试图了解 jQuery 在搜索 DOM 元素时如何创建返回对象 我已经浏览了来源 但我不完全确定我理解 并希望这里有人能给我一些见解 从我收集到的阅读源代码来看 当查询 jQuery DOM 时 jQuery 会找到匹配的 DOM 元素
  • 使用文本函数或查找和替换来重命名多列的简单方法

    有没有一种简单的方法可以使用文本函数 例如Text Upper https learn microsoft com en us powerquery m text upper or Text Proper https learn micro
  • 使用 matplotlib 组合两个独立图的最佳方法是什么?

    我不断地问自己这个问题 如何以模块化的方式将不同的绘图与 matplotlib 轻松组合 比方说 我编写了一个显示图形节点位置的函数 同时 我制作了另一个绘制一些多边形的函数 现在 组合输出的正确方法是什么 使节点看起来位于多边形内部 改变
  • Delphi 汇编器常量 'eof'

    似乎有一个未记录的常量eof在 asm 块上下文中 这是使用 Delphi 7 进行测试的 program TestEof APPTYPE CONSOLE var example Integer begin asm mov example
  • React.js 上 img 的正确路径

    我的反应项目中的图像存在一些问题 事实上 我一直认为 src 属性的相对路径是建立在文件架构之上的 这是我的文件架构 components file1 jsx file2 jsx file3 jsx container img js 但是我
  • 用homebrew安装后无法启动mysql

    我有一台 Mac Air 运行 OS X 10 6 8 10K540 和 homebrew 0 8 我已经安装了 MySqlbrew install mysql 我已按照 homebrew 给出的说明进行操作 具体来说 unset TMPD
  • Python:当你只有方法的字符串名称时,如何调用方法?

    这是用于 JSON API 的 我不想拥有 if method str method 1 method 1 if method str method 2 method 2 由于显而易见的原因 这不是最佳的 我将如何以可重用的方式使用映射字符