Python函数有5种参数类型:

位置参数:又叫必选参数,定义函数时参数按照位置顺序给出,调用时必须给值,而且必须放在最前面

默认参数:参数有默认值,调用时可以不给出,就按默认值处理

                注意:默认参数必须指向不可变对象。

可变参数:当不确定有多少输入的情况下,可定义此参数,*args,如果参数已形成列表或元组,在其前面加上*即可

关键字参数:定义**kwargs,调用时可传入任意无限制参数,但是参数名和参数值一起传入,如果已形成字典,在其前面加上**传入即可即可

命名关键字参数:对关键字参数进行限制的一种,只接受固定的命名关键字参数,定义时在可变参数之后。如果没有可变参数, 需要在前面加上*号 例如:def eat(food,juice,time=18,*,place,people),调用时必须参数名和参数值一起传入。可以给缺省值。命名关键字参数之间无顺序。

定义时顺序:位置参数,默认参数,可变参数,命名关键字参数,关键字参数。调用时,有可变参数的话,默认参数必须都复制不能省略。否则会把可变参数的值付给默认参数。


#python函数参数
import pdb
def info(name,age,country="china",lang="chinese",*args,city="beijing",sex,**kwargs):
    print("位置参数和默认参数:")
    print("My name is {p1}and I am {p2} years old,I come from {p3},my mother language is {p4}".format(p1=name,p2=age,p3=country,p4=lang))
    print("命名关键字参数:")
    print(city,sex)
    try:
        if bool(args):
            print("可变参数:")
            print(args) #元组类型
            print(*args)#元组中的参数
        if bool(kwargs):
            print("关键字参数:")
            print(kwargs)
            print(*kwargs) #只能打印出键
    except:
        print(type(args))
    print("\n")
t1 = ('chifan','shuijiao','dadoudou')
dict1 = {'hobby':"sleep",'shengao':198}
print("调用方式1:必须要给值的参数")
info("lilei",18,sex="man")   #位置参数和命名关键字必须传值
print("调用方式2:命名关键字参数之间无顺序")
info("lilei",18,sex="man",city="shanghai") #命名关键字参数之间无顺序
print("调用方式3:按顺序全部给值调用")
info("hali",34,"England","English","haha","zhazha","chacha","houhou",sex="woman",**dict1)
info("hali",34,"England","English",*t1,sex="woman",**dict1)
info("hali",34,country="France",lang="Franch",sex="man",**dict1)#info("hali",34,country="France",lang="Franch",*t1,sex="man",**dict1) #此种复制方法会出错,解释器报错TypeError: info() got multiple values for argument 'country'


结果:

调用方式1:必须要给值的参数
位置参数和默认参数:
My name is lileiand I am 18 years old,I come from china,my mother language is chinese
命名关键字参数:
beijing man




调用方式2:命名关键字参数之间无顺序
位置参数和默认参数:
My name is lileiand I am 18 years old,I come from china,my mother language is chinese
命名关键字参数:
shanghai man




调用方式3:按顺序全部给值调用
位置参数和默认参数:
My name is haliand I am 34 years old,I come from England,my mother language is English
命名关键字参数:
beijing woman
可变参数:
('haha', 'zhazha', 'chacha', 'houhou')
haha zhazha chacha houhou
关键字参数:
{'hobby': 'sleep', 'shengao': 198}
hobby shengao




位置参数和默认参数:
My name is haliand I am 34 years old,I come from England,my mother language is English
命名关键字参数:
beijing woman
可变参数:
('chifan', 'shuijiao', 'dadoudou')
chifan shuijiao dadoudou
关键字参数:
{'hobby': 'sleep', 'shengao': 198}
hobby shengao




位置参数和默认参数:
My name is haliand I am 34 years old,I come from France,my mother language is Franch
命名关键字参数:
beijing man
关键字参数:
{'hobby': 'sleep', 'shengao': 198}
hobby shengao