在python中重新定义函数

2024-05-16 02:08:44 发布

您现在位置:Python中文网/ 问答频道 /正文

假设有一个函数如下所示:

def func(arg1, args2):
    # do sth using arg1 and arg2

在运行时,我希望为args2保留一些值,在定义func时我们无法知道这些值

所以我想做的是:

func_simpler = func(, args2=some_value_for_arg2)
func_simpler(some_value_for_arg1) # actual usage

有什么想法吗?我知道有一种变通方法,比如更好地定义func,但我寻求一种更像func_simpler的解决方案。 提前谢谢


Tags: and函数for定义valuedefsomedo
3条回答

使用^{}

from functools import partial

def func(arg1, arg2):
    print(f'got {arg1!r} and {arg2!r}')

simple_func = partial(func, arg2='something')
simple_func("value of arg1")
# got 'value of arg1' and 'something'

使用^{} produces an object比使用包装器函数有很多优点:

  • 如果初始函数及其参数可以是pickled,那么partial对象也可以是pickled
  • partial对象的repr/str显示初始函数信息
  • 重复应用partial是有效的,因为它会压平包装
  • 可以检查函数及其部分应用的参数

请注意,如果要部分应用方法的参数,请改用^{}

我试图自己解决这个问题,我找到了一个不错的解决方案:

def func(a, b):
    print(a, ": variable given everytime the model is used")
    print(b, ": variable given when the model is defined")
enter code here
def model(b):
    def model_deliver(a):
        func(a, b)
    return model_deliver
s = model(20)
s(12) #prints result as below
# 12 : variable given everytime the model is used
# 20 : variable given when the model is defined

您可以在python中使用lambda

原始功能

def func(arg1, arg2):

然后获得arg2的默认值并定义simple_func

simple_func = lambda arg1 : func(arg1, arg2=new_default)

现在您可以运行simple_func

simple_func("abc") #"abc" = value for arg1

希望我能帮助你

相关问题 更多 >