搜索
您的当前位置:首页正文

函数的参数分为两种

来源:尚车旅游网
函数的参数分为两种

⼀:函数的参数分为两种:

#1.形参:在定义阶段括号内指定的参数,相当于变量名#2.实参:在调⽤阶段传⼊的值称之为实参,相当于值

#形参在定义阶段是不占⽤内存空间的

#在调⽤阶段,实参的值会绑定给形参,在调⽤结束后解除绑定。 # def foo(x,y): #x=1,y=2 # print(x,y) #

# foo(1,2)

⼆:在python中的参数分类

#1.位置参数:按照从左到右的顺序依次定义的参数

#位置形参:必须被传值,在函数调⽤的使传⼊的值多⼀个少⼀个都不⾏。#位置实参:与形参⼀⼀对应传值 #按照顺序给形参传值

如:位置形参:必须被传值,多⼀个少⼀个都不⾏。def foo(x,y): print(x,y)

foo(1,2,3)

错误:TypeError: foo() takes 2 positional arguments but 3 were given

#接受两个位置参数,你给了3个,只有两个位置形参,那就必须给传两个实参.

如:#位置实参:与形参⼀⼀对应传值 #按照顺序给形参传值def foo(x,y): print(x,y)foo(1,2)#结果是 1 2

def foo(x,y): print(x,y)foo(2,1)#结果是2 1

#我们通过位置实参,发现我们传参是通过顺序给我们的形参⼀⼀对应的

关键字参数:在函数调⽤时,按照key=value的形式定义的实参 #按照关键词的⽅式给我们的形参传值特点:指明道姓地给形参传值,不在依赖于位置注意:关键词实参必须放在位置实参的后⾯。如:

def info(name,age,sex): print(name,age,sex)info('zhao',18,'male')

#返回结果:zhao 18 male #这个传值你必须知道这个参数是按照什么排列的,有⼀个更好的⽅法,我们使⽤关键字参数

关键词传参如下:

def info(name,age,sex): print(name,age,sex)

info(name='zhao',sex='male',age=18)

#返回结果:zhao 18 male #现在就不依赖位置进⾏传参,这个时候我们的形参是固定死,位置形参

总结:

实参的传值⽅式:位置实参,关键词实参,它们必须遵循形参的规则。 位置形参是必须⽐传值。

默认参数:

#默认参数:在函数定义阶段,就已经给形参赋值了

#特点:定义阶段已经有值,意味着调⽤阶段可以不⽤传值#注意:

#1.默认参数必须放在位置形参的后⾯#2.默认参数的值旨在定义是被赋值⼀次

#3.默认参数的值通常应该是不可变类型 : 常⽤字符串 整型def info(name,age,sex='male'): print(name,age,sex)info('zhao',18)

#返回结果:zhao 18 male

def info(name,age,sex='male'): print(name,age,sex)info(name='zhao',age=18)#返回结果:zhao 18 male

可变成参数 *的⽤法

#可变长参数:在调⽤函数是,实参值的个数不固定#实参的形式有:位置实参,关键字实参

#位置实参的个数不固定,形参是负责收值,形参就必须有相应的解决⽅案#位置实参的个数不固定:形参的解决⽅案:*, **

# * 处理的按照位置定义的实参,溢出的部分,多出来的部分# ** 处理按照关键词,溢出的部分,多出来的部分

def info(x,y,*args): print(x,y) print(args)

info(1,2,3,4,5,6) #按照位置定义的实参,超出都会被*接受,然后保存成元组的形式,赋值给args # #返回结果: 1 2

( 3, 4, 5, 6) #第⼆种

#以后只要在实参看见* 他就等同于位置参数,在这⾥遇到的是⼀个元组的⽅式 *(1,2,3,4,5),⾸先我们进⾏解压得到的结果 1 2 3 4 5def info(x,y,*args): #args=(3,4,5) print(x,y) print(args)

info(*(1,2,3,4,5)) #解压打回原形成位置实参的⽅式 info(1,2,3,4,5) #在进⾏对形参传值info(*[1,2,3,4,5]) #解压 info(1,2,3,4,5)

#注意以后在实参看见* 就先把它解压打回原形#返回结果是⼀样

1 2(3, 4, 5)1 2(3, 4, 5)

#实例

#⾸先看到实参上有* 先把他打回原形

def info(x,y): #x=1 y=2 print(x,y)

info(*(1,2)) # info(1,2) 这⾥的1对应的x 2对应的y#**kwargs 关键字参数

#按照关键字定义的实参它的个数是不固定的,相应的形参也有⼀种按照关键词收值多出来的#只要关键字实参遇见 ** 先打会原形解压

def info(x,y,**kwargs): #kwargs={'x':1,'y':2,'c':3,'d':4,'e':5} 赋值给kwargs print(x,y) print(kwargs)

info(x=1,y=2,c=3,d=4,e=5) #c=3,d=4,e=5 这个是关键词多出来的实参#返回的结果是:1 2

{'c': 3, 'd': 4, 'e': 5} 实例⼆:

def info(x,y,**kwargs): # x=1,y=2 kwargs={c:3} print(x,y) print(kwargs)

# info(x=1,y=2,c=3,d=4,e=5)

info(**{'x':1,'y':2,'c':3}) #看到**关键字实参,先打回原形解压 info(x=1,y=2,c=3)

实例三:

def foo(name,age): print(name,age)

foo(**{'name':'zhao','age':18}) #把字典当做参数传给形参,先解压 foor(name=zhao,'age'=18)

foo({'name':'zhao','age':18},18) #注意这⾥不加**他就是⼀个位置实参,把⼀个字典给了我们的形参name赋值 name='name':'zhao','age':18}#返回结果:

zhao 18

{'name': 'zhao', 'age': 18} 18

*和 ** 可变长参数的应⽤的场景

#⾸先我们定义个 bar函数

#bar定义的是位置形参,意味就是必须给传值,传值的形式不固定,可以按照位置实参传值,关键字传值def bar(x,y,z): print(x,y,z)

#以下定义的这个函数很⽜逼,任意长度,任意形式的参数def wrapper(*args,**kwargs): print(args,kwargs)

wrapper(1,2,3,a=4,b=5,c=6)

站在实参的位置,必须这样写返回结果:(1, 2, 3) {'a': 4, 'b': 5, 'c': 6}

因篇幅问题不能全部显示,请点此查看更多更全内容

Top