# case 1 simply, normal way
def a(x):
print("function a",x)
a(1)
# case 2 set default value at function argument
def a(x=1):
print("function a",x)
a(2) # assign x=2 as local variable
a()
# case 3 non-default argument follows default argument
#def a(x=1, y, z): # Error: non-default argument follows default argument
# print("function a",x)
#a(2,1) # 2 assign to x 1 assign to y and missing value for z
# case 4 better arrange all assigment at the end
def a(x, y, z=1):
print("function a case 4 :",x,y,z)
a(2,3,4)
a(2,3)
# case 5 function call with keyword arguments
def a(x,y,z=1):
print("case 5 : function a",x,y,z)
a(2,z=4,y=3) #provide keyword at function call level, keyword order doesn't matter
#a(2,x=3) # 2 assigns to x, error: got multiple values for argument 'x'
# once use keyword argument, the rest must be keyword argument
#a(z=4,2,3) # error : positional argument follows keyword argument
#a(2,z=4,3) # error : positional argument follows keyword argument
a(2,3,z=4)
a(z=4,y=3,x=1) # all value with keyword argument
# case 6
def a(x,y,z=1):
print("case 6 : function a",x,y,z)
a(y=2,x=1)
# -*arg---------------------------------------
# case 7
def a(x,y,*arg):
print("function a case 7 :",x,y,arg)
a(1,2,3,4,5,6,7,8)
# case 8 missing 1 required keyword-only argument: 'z'
# def a(x,y,*arg,z):
# print("function a case 8 :",x,y,arg,z)
# a(1,2,3,4,5,6,7,8)
# case 9
def a(x,y,*arg,z=1):
print("function a case 9 :",x,y,arg,z)
print(arg[0]+arg[1])
a(1,2,3,4,5,6,7,8)
# case 10
def a(x,y,z=1,*arg):
print("function a case 10 :",x,y,arg,z)
a(1,2,3,4,5,6,7,8)
a(1,2)
# case 11
def a(x,y,*arg,z):
print("function a case 11 :",x,y,arg,z)
a(1,2,3,4,5,6,7,8,z=10)
# case 12 missing 1 required keyword-only argument: 'z'
# def a(x,y,*arg,z):
# print("function a case 12 :",x,y,arg,z)
# a(1,2)
# case 13 * without arg variable a() takes 0 positional arguments but 8 were given
def a(*,z):
print("function a case 13 :",z)
#a(1,2,3,4,5,6,7,8) # Error
a(z=1)
# case 14 **kwarg
def a(*,z,**kwarg): # after *, arguments must be getting keyword assignment from caller
print("function a case 14 :",z,kwarg)
a(z=1,y=2,x=3)
#a(1,y=2,x=3) Error
# case 15 **kwarg
def a(v,w,z,**kwarg):
print("function a case 15 :",v,w,z,kwarg)
a(2,4,z=1,y=2,x=3)
# case 16 *arg **kwarg
def a(*arg,**kwarg):
print("function a case 16 :",arg,kwarg,sep='$')
a(2,4,z=1,y=2,x=3)
#help(print)