python的五种参数 之 通过一个tuple和dict调用含有多个参数的函数

1、首先需要理解什么是位置参数(必选参数)、默认参数、可变参数、关键字参数、命名关键字参数-----(简述)

位置参数:按照函数规定的位置,填入参数。

def a1(x1,x2,x3):
    print(x1,x2,x3)
a1(1,2,3)
a1(3,2,1)

输出结果:

1 2 3
3 2 1

默认参数:若不指定参数,会有提前定义好的参数代替(默认参数必须指向不变对象!否则你的默认值会改变)

def a1(x1,x2,x3,x4=4):
    print(x1,x2,x3,x4)
a1(1,2,3)
a1(3,2,1

输出结果:

1 2 3 4
3 2 1 4

可变参数:传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个

#未使用可变参数
def a2(numbers):
    for n in numbers:
        print(n)
    return
a2([1,2,3])
#a2(1,2,3)#不可以这么写

输出结果:

1

2

3

#使用可变参数,加*
def a2(*numbers):
    for n in numbers:
        print(n)
    return
a2([1,2,3])
a2(1,2,3)
list = [4,4,4]#对于list形式的参数可以通过加*将其转化未可变参数
a2(*list)

输出结果:

[1, 2, 3]
1
2
3
4
4
4

关键字参数:参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict

def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
person('Adam', 45, gender='M', job='Engineer')

输出结果:

name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

也可以直接在**kw未和位置上调用一个组合好的dict参数

命名关键字参数:限制关键字参数的名字,就可以用命名关键字参数

#只接收city和job作为关键字参数
#和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数
def person(name, age, *, city, job):
    print(name, age, city, job)
person('Jack', 24, city='Beijing', job='Engineer')
#如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了
#命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错
#可以给命名关键字参数设置默认值

输出结果:

Jack 24 Beijing Engineer

!!!参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

2、分析下面函数

def f1(a, b, c=0, *args, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

def f2(a, b, c=0, *, rrr, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'rrr =', rrr, 'kw =', kw)

args=(1,2,3,4)
kw={'d':99,'x':'#'}
f1(*args,**kw)
#为什么这里要重新定义args呢?将args以可变参数传入会发生什么呢?
args=(1,2,3)
kw={'ccc':'ccc','x':'#','z':'zzz','rrr':88}
f2(*args,**kw)

f1(必选参数,必选参数,默认参数,可变参数,关键字参数)

args可以把用*args形式把4传入可变参数的位置上

输出结果:

a = 1 b = 2 c = 3 args = (4,) kw = {'d': 99, 'x': '#'}

f2(必选参数,必选参数,默认参数,*,命名关键字参数,关键字参数)

args不可以把4传到命名关键字参数上,args只能写三个数

kw作为字典其中如果不满足命名关键字参数的名字也会报错(只要满足名字的key在字典中,就可以,顺序可以随意)

匹配命名关键字参数之后,剩下的字典内的数据都将作为关键字参数

输出结果:

a = 1 b = 2 c = 3 rrr = 88 kw = {'ccc': 'ccc', 'x': '#', 'z': 'zzz'}

猜你喜欢

转载自blog.csdn.net/qq_41814635/article/details/82178824