【问题标题】:Dictionary mapping multiple functions to key - Python将多个函数映射到键的字典 - Python
【发布时间】:2018-12-31 06:15:34
【问题描述】:

我知道我们可以将字典映射与以下函数一起使用:

def call_functions(input)
    def function1():
        print "called function 1"

    def function2():
        print "called function 2"

    def function3():
        print "called function 3"

    tokenDict = {"cat":function1, 
                 "dog":function2, 
                 "bear":function3}

    return tokenDict[input]()

但是如果我们想将两个函数设置为字典中的值呢?喜欢:

tokenDict = {"cat":function1, function2
             "dog":function2
             ....

我尝试使用"cat":[function1, function2] 之类的列表,但有更简单的方法吗?

当我调用它时,我希望它执行function1,然后执行function2

【问题讨论】:

  • 始终将您的价值视为列表。这样,您就有了一个包含 1 个或多个操作的列表,并且无论您有多少个操作,您都可以以相同的方式处理这些操作。
  • 将这两个函数包装在另一个函数中:"cat": lambda: function1(), function2().
  • @Tyler。或者,您可以编写一个返回值列表的函数。

标签: python dictionary functional-programming


【解决方案1】:

“为一个键分配两个功能”是什么意思?就此而言,将两个 anything 分配给字典键是什么意思?您需要以某种方式将它们捆绑在一起,因为字典的全部意义在于每个键都对应于一个值(如果该值是一个捆绑,那就这样吧)。另一个答案涵盖了这一点。

如果您希望执行这两个函数,并且在不久的将来不会对这种方法进行太多更改,您还可以使用简单地按顺序调用它们的包装函数:

def function4:
    function1()
    function2()

【讨论】:

    【解决方案2】:

    根据 Tyler 的评论,为了保持一致性,请始终使用列表。然后使用列表推导来输出应用列表中每个函数的结果。 这是一个工作示例:

    def call_functions(i, val=3):
    
        def function1(x):
            return x*1
    
        def function2(x):
            return x*2
    
        def function3(x):
            return x*3
    
        tokenDict = {"cat": [function1, function2],
                     "dog": [function2], 
                     "bear": [function3]}
    
        return [f(val) for f in tokenDict[i]]
    
    call_functions('cat')   # [3, 6]
    call_functions('dog')   # [6]
    call_functions('bear')  # [9]
    

    旁注:你不应该隐藏内置的input

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-17
      • 1970-01-01
      • 2017-07-07
      • 2019-05-21
      • 1970-01-01
      • 2020-10-04
      • 2012-09-17
      • 2016-05-31
      相关资源
      最近更新 更多