一个*传参:
方式1:如果想传一个列表中的值,实参前加*。如: *[1,2,3]
方式2:直接传入一个列表,不加*。如[1,2,3],则传入的是一整个列表,包括[]
两个**传参:
方式1,:{name = 'zhuo'}
方式2:**{'name':'zhuo','age':'23'}
1 def name(*y,**z): 2 3 print(y,z) 4 5 name(*[1,2,3],**{'name':zhuo'}) #打印(1,2,3 ),{'name':'zhuo'} 6 7 name([1,2,3],{'name':'zhuo'}) #打印([1,2,3],{'name':'zhuo'}) , {} 8 9 name([1,2,3],{name = 'zhuo'}) #打印[1,2,3],{'name':'zhuo'}
形参
实参
位置参数:必须一一对应,不能缺少或增多,位置参数必须要在关键字参数左边
1 (1)求x的n次方 2 def power(x,n): #x,n为位置参数 3 s=1 4 while n>0: 5 n=n-1 6 s=s*x 7 return s 8
关键字参数:
1 5、关键字参数 ** (可以传入0到任意个关键字参数,格式 city='longyan') 2 >>> def person(name,age,**kw): 3 print('name:',name,'age:',age,'other:',kw) 4 (1)传入新的dict参数 5 >>> person('zhuo',22,city='longyan') # city='longyan'为关键字参数 6 name: zhuo age: 22 other: {'city': 'longyan'} 7 (2)使用现成的dict 8 >>> extra={'city:':'Beijing','job':'leader'} 9 >>> person('zhuo',22,city=extra['city:'],job=extra['job']) 10 name: zhuo age: 22 other: {'city': 'Beijing', 'job': 'leader'} 11 (3)使用现成的dict+ ** extra(**表示默认传入dict extra中的所有元素) 12 >>> person('zhuo',22,**extra) 13 name: zhuo age: 22 other: {'city:': 'Beijing', 'job': 'leader'} 14 ● 在person函数里,我们保证能接收到name和age这两个参数,但是,如果调用者愿意提供更多的参数,我们也能收到
1 6、命名关键字参数 , *, 2 (1)检查person函数内是否有city和job参数 3 def person(name,age,**kw): 4 if ‘city’ in kw: 5 #有city函数 6 pass 7 if ‘job’ in kw: 8 #有job函数 9 pass 10 print(name,age,kw) 11 12 (2)限制关键字名字,分隔符 ,*, 13 命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错 14 def person(name, age, *, city, job): 15 print(name, age, city, job) 16 >>> person('Jack', 24, city='Beijing', job='Engineer') 17 Jack 24 Beijing Engineer
默认参数:调用函数时可以不传参数,使用定义时的默认参数
1 默认参数(默认参数必须指向不变对象) 2 #默认参数使用注意事项: 3 #1.必选参数在前,默认参数在后 4 #2.有多个参数时,把变化大的参数放前面,变化小的参数放后面。后变化小的的可以作为默认参数 5 def power(x, n=2): 6 s = 1 7 while n > 0: 8 n = n - 1 9 s = s * x 10 return s 11 #可按自动顺序改变默认参数值,也可指定改变默认参数的值(如city本来是第四个参数,‘shenzheng’) 12 >>> enroll('zhu=o',5,city='longyan') 13 name: zhu=o 14 gender: 5 15 age: 6 16 city longyan 17 18 #3.默认参数的坑(所以参数要定义为不变参数) 19 >>> add_end() 20 ['END'] 21 >>> add_end() 22 ['END', 'END'] 23 >>> add_end() 24 ['END', 'END', 'END'
参数组(非固定参数):
1 def func(x,*args): 2 print(args) 3 func(1,['x','y','z']) 4 #(['x', 'y', 'z'],) 实参前不加*,默认传入的是一个元组,且该列表是元组中的第一个数据 5 func(1,*['x','y','z']) 6 #('x', 'y', 'z')实参前加*,表示传入的是一个整体列表
1 可变参数 * 2 #计算a2 + b2 + c2 + …… 3 def calc(number): 4 sum=0 5 for i in number: 6 sum=i*i+sum 7 return sum 8 (1)传入新的列表参数 9 >>> print(calc([1,2,3])) 10 14 11 (2)使用现成的列表(角标) 12 >>> nums=[1,2,3] 13 >>> print(calc([nums[0],nums[1]])) 14 5 15 (3)使用 *nums 把nums列表的所有元素作为可变参数传入 16 >>> print(calc([*nums])) 17 14