Normally you call a function and write it’s arguments respectively.
But you can also do it differently; add-ons include:
def f(a, b=10, c=100): # Default value
print(a,b,c)
f(5) # Result: 5+10+100=115
f(10,15) # Result: 10+15+100=125
f(10,c=15) # Result: 10+10+15=35
f(*[3,5,8]) # Passes 3,5,8 as arguments
f(**{'a':3,'c':8}) # Passes a=3,c=8 as arguments
f(*[5],b=10,**{'c':10}) # Passes 5,b=10,c=10 as arguments
def g(normal_argument,not_required=0,*arguments,**keyword_arguments):
print(normal_argument,not_required,arguments,keyword_arguments)
g(0,*[3,5,7,6,3],**{'a':3,'b':8})
# Result: 0 3 (5, 7, 6, 3) {'a': 3, 'b': 8}
# 3 became in b