def annoying_print3(obj1, obj2="", obj3=""):
print(obj1, obj2, obj3)
annoying_print3() # need at least 1 parameter for obj1
annoying_print3("hi") # hi
annoying_print3(1, 2) # 1 2
annoying_print3(1, 2, 3) # 1 2 3
annoying_print3(1, 2, 3, 4) # too many params
annoying_print3(obj1=1) # 1
annoying_print3(obj1=1, obj2=2) # 1 2
annoying_print3(obj1=1, obj3=3) # 1 3
annoying_print3(obj2=2, obj1=1) # 1 2
annoying_print3(1, obj2=2) # 1 2
annoying_print3(1, obj3=3) # 1 3
annoying_print3(obj2=1) # needs value for obj1
# after named arguments cannot put positional arguments
annoying_print3(obj2=2, 1)