如何通过调用其他函数的函数传递参数?
How to pass an argument through a function which call other functions?
我的问题的简单版本如下所示:
def function_1(x, function):
print(x)
function()
def function_2(y):
print(2*y)
def function_3(z, n):
print(3*z)
print(5 * n)
function_1(5, function_2)
function_1(3, function_3)
我的问题是在调用 function_1 时,我如何给它一个参数,该参数将作为参数添加到被调用函数(function_2 或 function_3)中?
初学者在这里。提前致谢。
你的意思是在参数中加上x
吗?
def function_1(x, function):
print(x)
function(x)
...
如果你想使用相同的参数 x 到 function_1 作为内部调用函数的参数,那么你可以使用:
def function_1(x, function):
print(x)
function(x)
或者你想为内部调用的函数使用另一个参数 y 那么你可以像下面这样使用:
def function_1(x,y,function):
print(x)
function(y)
您可以使用 functools.partial
:
from functools import partial
...
function_1(5, partial(function_2, 5))
function_1(3, partial(function_3, 2, 3))
partial
允许您将一个对象传递给 function_1
,可以在不传递参数的情况下调用该对象。
正如 Kacper 所建议的,Python 提供了使用任意位置参数列表 (args) 和关键字参数字典 (kwargs) 的可能性:
def fun_x(x, a_callable, *args, **kwargs):
print(x, a_callable, args, kwargs)
a_callable(*args, **kwargs)
def fun_y(a,b,kwarg1):
print(a,b,kwarg1)
fun_x(3,fun_y, "first", "second", kwarg1="third")
3 <function fun_y at 0x000001D1E0E02378> ('first', 'second') {'kwarg1': 'third'}
first second third
我的问题的简单版本如下所示:
def function_1(x, function):
print(x)
function()
def function_2(y):
print(2*y)
def function_3(z, n):
print(3*z)
print(5 * n)
function_1(5, function_2)
function_1(3, function_3)
我的问题是在调用 function_1 时,我如何给它一个参数,该参数将作为参数添加到被调用函数(function_2 或 function_3)中? 初学者在这里。提前致谢。
你的意思是在参数中加上x
吗?
def function_1(x, function):
print(x)
function(x)
...
如果你想使用相同的参数 x 到 function_1 作为内部调用函数的参数,那么你可以使用:
def function_1(x, function):
print(x)
function(x)
或者你想为内部调用的函数使用另一个参数 y 那么你可以像下面这样使用:
def function_1(x,y,function):
print(x)
function(y)
您可以使用 functools.partial
:
from functools import partial
...
function_1(5, partial(function_2, 5))
function_1(3, partial(function_3, 2, 3))
partial
允许您将一个对象传递给 function_1
,可以在不传递参数的情况下调用该对象。
正如 Kacper 所建议的,Python 提供了使用任意位置参数列表 (args) 和关键字参数字典 (kwargs) 的可能性:
def fun_x(x, a_callable, *args, **kwargs):
print(x, a_callable, args, kwargs)
a_callable(*args, **kwargs)
def fun_y(a,b,kwarg1):
print(a,b,kwarg1)
fun_x(3,fun_y, "first", "second", kwarg1="third")
3 <function fun_y at 0x000001D1E0E02378> ('first', 'second') {'kwarg1': 'third'}
first second third