It’s simple to pass dynamic number of (key-value) parameters when calling function , or “reduce” number of parameters by pre-pass in a fixed value to make it another function
pass N parameters
def args1(first, *mid, last):
print(f'first={first}')
for m in mid:
print(f'mid parameter: {m}')
print(f'last={last}')def args2(first, *rest):
print(f'first={first}')
for m in rest:
print(f'other parameter: {m}')if __name__ == "__main__":
args1('a',2,3,4,5,last='b')
args2('a',2,'3',4,'5')Output:
first=a
mid parameter: 2
mid parameter: 3
mid parameter: 4
mid parameter: 5
last=b
first=a
other parameter: 2
other parameter: 3
other parameter: 4
other parameter: 5
enforcing caller pass named parameter
def enforce_arg(*, first, last):
print(f'first={first}, last={last}')if __name__ == "__main__":
#enforce_arg(1,2) # error
#enforce_arg(1,last=2) # error
#enforce_arg(first=1,last=2)
use kwargs pass N key-value parameters
def kwargs1(*args, **kwargs):
print(f'{args}')
print(f'{kwargs}')if __name__ == "__main__":
kwargs1(1,2,3,a=4,b=5)
# (1, 2, 3)
# {'a': 4, 'b': 5}
using partial to “reduce” the number of parameters need pass in and reuse existing function create another function
def add(a,b):
return a+b
if __name__ == "__main__":
print(add(1,2))
add_1 = partial(add, 1)
print(add_1(2))3
3