python:带有字符串输入的调度方法

2023-12-27

我需要编写一个接受 3 个参数的方法:

  1. a string带有函数名称
  2. 一个有序的list该函数的参数。这包括具有默认值的参数和*varargs,但不包括**kwargs
  3. a dict表示任何附加关键字参数,或None如果没有

我需要使用此输入来检索函数并调用它。例如:

def dispatch(name, args, kwargs=None):
    do_magic_here(name, args, kwargs)

def meth1():
    print "meth1"

def meth2(a, b):
    print "meth2: %s %s" % (a, b)

def meth3(a, **kwargs):
    print "meth3: " + a
    for k,v in kwargs.iteritems():
        print "%s: %s" % (k,v)

我需要能够调用这样的东西:

>>> dispatch("meth1", [])
meth1
>>> dispatch("meth2", [1, 3])
meth2: 1 3
>>> dispatch("meth3", [1], {"hello":2, "there":3})
meth3: 1
hello: 2
there: 3

我可以这样做:

def do_magic_here(name, args, kwargs=None):
    if name=="meth1":
        meth1()
    if name=="meth2":
        meth2(args[0], args[1])
    if name=="meth3":
        meth3(args[0], **kwargs)

但我正在尝试分派 40 个方法,而且这个数字可能会增加,所以我希望有一种更加编程化的方法来做到这一点。我正在看一些东西getattr,但我不太明白。


我只想用

def dispatch(name, *args, **kwargs):
    func_name_dict[name](*args, **kwargs)

with

func_name_dict = {'meth1':meth1,
                  'meth2':meth2,
                  ...}

允许你通过args and kwargs通过更自然、透明的方式:

>>> dispatch("meth2", 1, 3)
meth2: 1 3

你当然可以使用globals() or locals()代替字典,但您可能需要小心每个命名空间中您想要或不想向调用者公开的函数

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python:带有字符串输入的调度方法 的相关文章

随机推荐

  • 为什么这种随机生成图的方式不公平?

    我的目标是生成一个由 n 个顶点组成的有向图 使得每个顶点都有一条出边和一条入边 我认为实现此目的的一种方法是将所有顶点放入一个罐中 并让顶点轮流洗牌并拉出条目 例如 如果顶点 1 拉出顶点 3 则意味着将有一条从 1 到 3 的边 如果一
  • Android Activity启动模式和深层链接问题

    我的应用程序有 2 个活动 应用程序的根 Activity 是 MainActivity 如果凭据丢失或无效 用户将在完成 MainActivity 时重定向到 LoginActivity 如果我将主活动的启动模式设置为 singleTas
  • MySQL 限制、组和 AVG 查询

    这里有一个谜题给你 我将集群计算的统计数据保存在名为 jobs 的 MySQL 表中 每个作业行都有一个执行作业的主机 不是唯一的 以秒为单位的作业执行时间以及作为 PK 的唯一整数 因此我可以简单地通过订购 PK 来订购已完成的作业 截至
  • 使用“git svn clone”的SVN到Git导入问题

    当尝试在 Git 中导入我的 SVN 存储库时 使用以下命令 git svn clone s https xx xx xx xxx repo iphone project https xx xx xx xxx repo iphone pro
  • Chrome 自动填充涵盖了 Google Maps API v3 的自动完成功能

    我正在使用 Google Maps Javascript v3 在 HTML 输入字段上设置自动完成功能 如下所示 https i stack imgur com sbBKv png https i stack imgur com sbBK
  • 外键(class_id)未填充在belongs_to关联中

    我是 Rails 新手 正在 Rails3 beta4 上构建一个小型测试应用程序 我在用真实逻辑管理用户会话 以标准方式设置为根据本教程 http github com binarylogic authlogic example 我已经搭
  • Angular Mat-Table 完成渲染事件 / Mat Paginator 加载 Spinner

    我正在使用带有相当大的预查询数据源的角度材质表 现在 每次我使用内置分页器更改表格页面时 在呈现新表格行之前都会有一个短暂的延迟 并且我想同时显示一个加载微调器 问题是 当表页开始更改时 分页器只会触发一个事件 到目前为止 我没有找到解决方
  • cassandra-cli 在哪里

    我已经使用 docker 安装了 Cassandra 3 7 我正在读一本书 要求我运行一个名为 cassandra cli 的实用程序 但是当我做一个find name cassandra cli我在任何地方都找不到这个实用程序 你知道我
  • Java 错误 - net.ucanaccess.jdbc.UcanaccessSQLException:格式错误的字符串:'

    我在使用 uCanaccess 检索保存在桌面中的数据库时出现错误 我的代码如下 package Week11Package 导入java util Scanner 导入 java sql 公共类 dbTest1 static Scanne
  • 阻止 spring-data-rest 中的 HTTP 方法

    我正在使用 spring data rest 给出以下存储库 RepositoryRestResource public interface MyRepository extends PagingAndSortingRepository
  • 在 java 8 中使用正确的偏移量将 OffsetDateTime 转换为 LocalDateTime

    当我尝试转换时OffsetDateTime to LocalDateTime来自 java time 我期望结果LocalDateTime将更新为本地时区 所以 如果我有一个OffsetDateTime of 2011 12 03T10 0
  • 基于php的Photoeffects网站

    我想知道网站怎么样http photofunia com http photofunia com 并建立了其他在线照片效果网站 例如 使用php 我想将两个图像frame png与profile jpg合并 我希望我的frame png 透
  • 替换网站中的文本

    我正在寻找使用 JavaScript 替换网页 任何我想要运行它的网页 中的文本 我不是 JavaScript 专家 所以我有点迷失了 如果可以的话我想避免使用 jQuery 通过谷歌 我发现this https stackoverflow
  • 在sqlite中将int转换为real

    sqlite 中的除法返回整数值 sqlite gt select totalUsers totalBids from select select count from Bids as totalBids select count from
  • 获取javaFX 8中节点的屏幕坐标

    我正在 Windows 8 1 64 位上开发 JavaFX 应用程序 具有 4GB RAM 和 JDK 版本 8u45 64 位 我想使用捕获部分屏幕Robot但问题是我无法获取我想要捕获并且不想使用的锚点窗格的屏幕坐标snapshot因
  • 在图像悬停时显示播放图标

    目标 当我将鼠标悬停在 item 图像上时 我希望 play 图像出现在 item 图像 div 的中心 我做了以下事情 play img 与 itemImage img 重叠 HTML div class itemsContainer i
  • Java 的 BouncyCastle 并不总是验证 OpenSSL ECDSA 签名

    我使用 OpenSSL 在 C 中 对文本进行签名 但是我的 Java 程序并不总是验证签名消息 只有大约五分之一得到验证 有趣的是https kjur github io jsrsasign sample sample ecdsa htm
  • 为什么 .title(for: .normal) 对于 UIKit 中的 Plain 样式返回 nil

    我正在关注 Apple 的 Apple Pie 项目Swift 基础知识开发 https books apple com us book develop in swift fundamentals id1556365994书 第 333 3
  • HTML 登录表单:提供用户名、自动填充密码

    我需要一个登录表单 只需提供我的用户名 因为它会记住我的密码并自动填写密码字段 例如 像 gmail auth 一样 我怎样才能做到这一点 thanks Luca 提醒人们避免用头撞墙的注意事项 Chrome 不会在不受信任的网站上保存和建
  • python:带有字符串输入的调度方法

    我需要编写一个接受 3 个参数的方法 a string带有函数名称 一个有序的list该函数的参数 这包括具有默认值的参数和 varargs 但不包括 kwargs a dict表示任何附加关键字参数 或None如果没有 我需要使用此输入来