Which kind of arguments allows you to skip arguments or place them out of order ? code example

Example: python function arguments

#*args and **kwargs are normally used as arguments when calling the function.

#*args returns as tuple and **kwargs returns as dictionary.

#*args and **kwargs  let you write functions with variable number of arguments in python.

def func(required,*args,**kwargs):
    return f"{required} {args} {kwargs}"
  
func("Nagendra",5,32,2,1,23,) #output == 'Nagendra (5, 32, 2, 1, 23) {}'
func("Nagendra",5,32,2,1,23,key1="55",key2="75") #output == "Nagendra (5, 32, 2, 1, 23) {'key1': '55', 'key2': '75'}"

#Very understable example of args.
#Given n number of arguments in a function calculate its average
def average(*args):
  '''
  As we already know *args means collection of values in a tuple.
  INPUT: arguments are given. example average(4,10,) 
  OUTPUT: average of two numbers (4+10)/2 == 14
  '''
  return sum(args)/len(args)

average(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) #output == 8.0