Making an N-Argument Callable Work As a Callable with Fewer Arguments
Problem
You have a callable that you would like to use with some other Python code, possibly as a callback function or handler, but it takes too many arguments and causes an exception when called.
Solution
If you need to reduce the number of arguments to a function, you
should use functools.partial()
. The partial()
function allows you
to assign fixed values to one or more of the arguments, thus reducing
the number of arguments that need to be supplied to subsequent calls.
To illustrate, suppose you have this function:
def
spam
(
a
,
b
,
c
,
d
):
(
a
,
b
,
c
,
d
)
Now consider the use of partial()
to fix certain argument values:
>>>
from
functools
import
partial
>>>
s1
=
partial
(
spam
,
1
)
# a = 1
>>>
s1
(
2
,
3
,
4
)
1 2 3 4
>>>
s1
(
4
,
5
,
6
)
1 4 5 6
>>>
s2
=
partial
(
spam
,
d
=
42
)
# d = 42
>>>
s2
(
1
,
2
,
3
)
1 2 3 42
>>>
s2
(
4
,
5
,
5
)
4 5 5 42
>>>
s3
=
partial
(
spam
,
1
,
2
,
d
=
42
)
# a = 1, b = 2, d = 42
>>>
s3
(
3
)
1 2 3 42
>>>
s3
(
4
)
1 2 4 42
>>>
s3
(
5
)
1 2 5 42
>>>
Observe that partial()
fixes the values for certain arguments and
returns a new callable as a result. This new callable accepts the
still unassigned arguments, combines them with the arguments given to
partial()
, and passes everything to the original function.
Discussion
This recipe is really related ...
Get Making an N-Argument Callable Work As a Callable with Fewer Arguments now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.