python 在列表中存储函数和参数

kmpatx3s  于 2023-04-04  发布在  Python
关注(0)|答案(3)|浏览(181)

我想在一个列表中存储多个函数。我有多个这样的列表存储在一个字典中。我想稍后调用这些函数,基于当时活动的列表。然而,我不仅想存储函数,我还想添加多个参数。
编辑:列表是按钮的列表。当按钮被按下时,函数应该运行。其中一个函数用于在按钮的“层”之间交换。
然而,当初始化列表时,函数被调用。我只希望这在按钮被按下时发生。
有没有办法解决这个问题,或者有没有更好的方法来存储我的数据?

dictionary = {
  "example1" : [function1(argument), function2(argument), function4(argument)],
  "example2" : [function1(argument), function5(argument), function3(argument)],
  "example3" : [function1(argument), function3(argument), function5(argument), function1(argument)],
  "example4" : [function3(argument, argument2],
  "example5" : []
}
0qx6xfy6

0qx6xfy61#

正如一位评论者所说,您可以使用functools.partial来存储函数,以便稍后进行计算。
下面是一个完整的例子:

import functools

def function1(arg1, arg2):
    print("function1: ", arg1, arg2)

dictionary = {
    "example1": functools.partial(function1, "arg1", "arg2"),
}

dictionary["example1"]()
# prints: function1:  arg1 arg2
pgvzfuti

pgvzfuti2#

partial按照注解工作。但是,请参见下面的输出。
又名:Ninja-ed by Ben

from functools import partial

def this(in_str):
    print(f'{in_str}')
    
def that(in_str, in_key=''):
    print(f'{in_str} {in_key}')
    
foo = {'example_1': [partial(this, 'why'), partial(that,'are',in_key='you')],
       'example_2': [partial(this, 'doing'), partial(that,'this')],
       }

for key, val in foo.items():
    for your_func in val:
        your_func()

输出:

why
are you
doing
this
nkhmeac6

nkhmeac63#

避免对函数对象求值

为了避免计算函数,你必须传递函数本身。有很多方法可以做到这一点,例如:

e = "something"

func = lambda: print(e)

func()

e = "another thing"

func()

输出:

something
another thing

如果你想使用字典,它的工作方式如下:

dictionary = {"some_func": lambda: function1(argument)}
dictionary["some_func"]()  # argument is is passed to function1, changeable after the declaration

正如答案中已经提到的,你也可以使用functools来实现这一点。

简单介绍参数和函数

如果你只是想存储函数定义,以便以后用任意参数调用:

def some_func(*args, **kwargs):
    """
    args is a tuple of type tuple[Any,...],
    kwargs is a dict of type dict[str, Any]
    """
    for arg in args:
        # do something with your positional args
        print(arg)

dictionary = {"some_func": some_func} # pass the function like so

dictionary["some_func"]("some_arg")

输出:

some_arg

相关问题