gpt4 book ai didi

python - 如何将附加参数(除了参数)传递给函数?

转载 作者:行者123 更新时间:2023-12-05 08:59:13 24 4
gpt4 key购买 nike

我需要编写一个具有一个参数的函数(比如 fun1),因为它将在其他函数(fun2)中使用。后者需要一个带有单个参数的函数。但是,我需要将其他参数传递给函数 fun1。如何在不使用全局变量的情况下在 Python 中执行此操作?或者这是唯一的方法?

补充:如果重要的话,fun2scipy.optimize中的一些优化函数。下面是使用 global 将附加参数 c 传递给函数 fun1 的示例。在第一次调用中,函数 fun2fun1 作为 x+1,但在第二次调用中,fun1x+2。我想做类似的,但不使用 global。希望这个例子能澄清这个问题。 (示例已更改)。

def fun1(x) :
global c
return x + c

def fun2(f1, x) :
return f1(x)

# main program
global c
x0= 1
c= 1; y= fun2(fun1, x0); print(y) # gives 2
c= 2; y= fun2(fun1, x0); print(y) # gives 3

最佳答案

如果我没有正确理解你的问题,那么有很多方法可以做你想做的事并避免使用全局变量。他们来了。

给定:

x0 = 1
def fun2(f1, x):
return f1(x)

所有这些技术都可以实现您的目标:

#### #0 -- function attributes
def fun1(x):
return x + fun1.c

fun1.c = 1; y = fun2(fun1, x0); print(y) # --> 2
fun1.c = 2; y = fun2(fun1, x0); print(y) # --> 3

#### #1 -- closure
def fun1(c):
def wrapper(x):
return x + c
return wrapper

y = fun2(fun1(c=1), x0); print(y) # --> 2
y = fun2(fun1(c=2), x0); print(y) # --> 3

#### #2 -- functools.partial object
from functools import partial

def fun1(x, c):
return x + c

y = fun2(partial(fun1, c=1), x0); print(y) # --> 2
y = fun2(partial(fun1, c=2), x0); print(y) # --> 3

#### #3 -- function object (functor)
class Fun1(object):
def __init__(self, c):
self.c = c
def __call__(self, x):
return x + self.c

y = fun2(Fun1(c=1), x0); print(y) # --> 2
y = fun2(Fun1(c=2), x0); print(y) # --> 3

#### #4 -- function decorator
def fun1(x, c):
return x + c

def decorate(c):
def wrapper(f):
def wrapped(x):
return f(x, c)
return wrapped
return wrapper

y = fun2(decorate(c=1)(fun1), x0); print(y) # --> 2
y = fun2(decorate(c=2)(fun1), x0); print(y) # --> 3

请注意,在调用中并不总是严格要求编写 c= 参数——我只是将它放在所有使用示例中以保持一致性,因为它可以更清楚地说明它是如何传递的。

关于python - 如何将附加参数(除了参数)传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16983863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com