1函数的参数
在Python中函数参数的定义方式有以下4种方式
1位置参数
2关键字参数
3默认参数
4可变参数
2位置参数
实参和形参一一对应,按位置来传递参数
第一实参给第一形参赋值,第二个实参给第二个形参赋值,像这种按位置传递的的方式就是位置参数
def sum_num(num1,num2):
print(num1+num2)
sum_num(1,2) """3"""
3关键字参数
我们在传参的时候,以形参等于实参的形式忽略定义的顺序进行传参的传参方式
def sum_num(num1, num2):
print(num1)
print(num2)
print(num1 + num2)
sum_num(num1=10, num2=20)
sum_num(num2=20, num1=10)
参数值不受位置影响
10
20
30
10
20
30
如果想要和位置参数混合使用 则须注意 位置参数在前,关键字参数在后 如:
def sum_num(num1, num2):
print(num1)
print(num2)
print(num1 + num2)
sum_num(10, num2=20) #位置参数在前,关键字参数在后 正常运行
sum_num(20, num1=10) #sum_num()为参数“num1”获取多个值 报错
sum_num(num1=10,20) #位置参数在后,关键字参数在前 报错#
4默认参数
我们在定义参数的时候,我们给形参一个默认值,在我们调用函数的时候,如果不给有默认值的形参传参,会自动采用默认值
当某个值变化的时候,我们就可以使用默认参数。
def save_userinfo(name,age,gender = '男'):
print('姓名:{},年龄:{},性别:{}'.format(name,age,gender))
save_userinfo('王斌',20)
save_userinfo('lcl',10,'女')
结果:
姓名:王斌,年龄:20,性别:男
姓名:lcl,年龄:10,性别:女
注意 默认的参数一定要写到形参的后面
5可变参数
如果函数中的参数过多,我们定义起来非常的麻烦,调用起来也非常的麻烦,因此python给我们提供了可变参数类型。能处理比当初声明时更多的参数,会将传入的参数变成元组(*args)或者字典(**kwargs)
1,元组参数 *args
注意 :1 多个位置会被组织成为一个元组类型
2 一般情况下,变量名为args *args
def func(*aa):
print(aa) #可以传递任意多个形参
print(aa[0],aa[1])
func(1,2,3,4,5,) #多个位置会被组织成一个元组
def func(*args):
print(args) #可以传递任意多个形参
print(args[0],args[1])
func(1,2,3,4,5,) #多个位置会被组织成一个元组
两者的代码完全一致,但是一般情况下选择使用第二种命名方式
*号的打散功能
tup = (1,23,4)
print(tup) (1, 23, 4)
print(*tup) 1 23 4
lst = ['a','b','c']
print(*lst) a b c
s = 'hello'
print(*s) h e l l o
调用函数时的用法 例子
def func(a,b,c):
print(a,b,c,)
print(type(a))
tup = (1,2,3)
func(tup[0],tup[1],tup[2])
结果:
1 2 3
<class 'int'>
2字典参数**kwargs
通过给形参前面添加**是参数变成一个字典,多有传递的参数都变成字典的键值对,这里传参要求键等于值得形式
**kwargs 结果类型是字典,传递的值是以key = value方式传入
def func(**kwargs):
print(kwargs)
print(kwargs['name'],kwargs['age'],kwargs['gender'])
func(name='zs',age=10,gender='男')
结果:
{'age': 10, 'gender': '男', 'name': 'zs'}
zs 10 男
注意 关键字被组织成一个字典类型的数据
** 具有将字典打散的功能
def func(name,age):
print(name,age)
dic = {'name':'zs','age':10}
func(**dic) # zs 10
func(name='zs',age='10') # zs 10
注意事项:**kwargs必须放在*args后面。
def func(a, *args, b=10, **kwargs):
print(a)
print(args)
print(b)
print(kwargs)
func('zs','ww',b = 23 ,c = 30 ,d = 49)
6 函数的嵌套
def func1():
print('1')
def func2():
func1()
print('2')
def func3():
func2()
print('3')
func3()
1
2
3