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

Python动态函数名称

彭修筠
2023-03-14
问题内容

我正在寻找一种更好的方法来基于Python中的变量来调用函数,而不是使用如下的if / else语句。每个状态码都有对应的功能

if status == 'CONNECT':
    return connect(*args, **kwargs)
elif status == 'RAWFEED':
    return rawfeed(*args, **kwargs)
elif status == 'RAWCONFIG':
    return rawconfig(*args, **kwargs)
elif status == 'TESTFEED':
    return testfeed(*args, **kwargs)
...

我认为这将需要某种工厂功能,但不确定语法


问题答案:

做到这一点的规范方法是使用字典来模拟switchif/elif。您将在SO上找到类似问题的几个问题。

将您的功能放入状态码为键的字典中:

funcs = {
    'CONNECT': connect,
    'RAWFEED': rawfeed,
    'RAWCONFIG' : rawconfig,
    'TESTFEED': testfeed
}
funcs[status](*args, **kwargs)


 类似资料:
  • 问题内容: 我有这个: 我想要这个: 问题答案: 更新 正如其他人提到的那样,这不是最快也不推荐的解决方案。 您可以使用eval:

  • 问题内容: 如何在之前或之后向现有功能添加代码? 例如,我有一堂课: 我该如何编辑类元编程,以便执行此操作 也许有某种方法可以附加另一个功能进行测试? 添加另一个功能,例如 并将原件更改为 有没有办法做到这一点? 问题答案: 如果需要,可以使用装饰器来修改功能。但是,由于它不是在函数初始定义时应用的装饰器,因此您将无法使用语法糖来应用它。 请注意,它也会修改现有实例的方法。 编辑 :使用和将装饰器

  • 问题内容: 是否可以在SQL中使用动态名称调用函数? 例如: 这将为表List_of_Functions中的每一行调用一个不同的函数。 还是我要解决所有这些错误? 问题答案: 您将需要构建(输入它,或者根据您的表动态地构建它)一条SQL语句,例如: 与其构建所有这些功能,不如构建一个功能并传递一个该功能可用于区分处理的值,这会更好吗?喜欢:

  • 问题内容: 我有以下代码: 我怎么能叫和动态? 例如: 我使用了大括号,因为这是我以前在PHP中使用的方式,但是显然不起作用。 如何使用Python做到这一点? 问题答案: 如果不想使用并且不想创建单独的模块和/或类来封装要动态调用的函数,则可以将它们作为当前模块的属性来调用:

  • 问题内容: 正如可以使用type(name,base-classes,namespace-dict)创建动态类一样,可以创建动态函数吗? 我尝试按照以下方式做一些事情: 好吧,所以我会很聪明,但是: Python是否以允许动态类的相同方式 专门 阻止动态函数的创建? 编辑:注意,我将禁止使用exec。由于我的问题是Python语言本身是否允许这样做。 提前致谢。 问题答案: 还有,你可以用它来动态

  • 问题内容: 我已经编写了一个存储过程函数来从表中获取名称。麻烦的是,我希望将表名作为参数传递(我需要使用几个不同的表来使用此函数): 此方法有一个错误,因为它使用变量名“ tableName”而不是变量的实际值。 我可以解决此问题的 方法 通过使用这样的: …但是,当我尝试在函数中执行此操作时,我收到一条消息,提示: 存储函数或触发器中不允许使用动态SQL 我尝试使用 过程 代替,但是我不能像函数

  • 问题内容: 我想使用运行时之前不知道的字段名称过滤器来调用查询…不确定如何构造变量名称…或者我很累。 如果funct()返回的名称等于 不知道该怎么做… 问题答案: 您可以创建字典,设置参数,然后通过解压缩字典作为关键字参数将其传递给函数:

  • 本文向大家介绍Python中的匿名函数,包括了Python中的匿名函数的使用技巧和注意事项,需要的朋友参考一下 这些函数被称为匿名函数,因为它们不是通过使用def关键字以标准方式声明的。您可以使用lambda关键字创建小的匿名函数。 Lambda形式可以接受任意数量的参数,但仅以表达式形式返回一个值。它们不能包含命令或多个表达式。 匿名函数不能直接调用print,因为lambda需要一个表达式 L