一、函数的参数分为形参与实参
(1) 形参: 在函数定义阶段,括号内定义的参数(变量名),称之为形式参数,简称形参
def func(x,y):
print(x,y)
(2) 实参: 在函数调用阶段,括号内传入的值(变量值),称之为实际参数,简称实参
func(1,2)
二、详细介绍形参与实参
2.1 位置参数
(1) 位置形参:在函数定义阶段,按照从左到右的顺序依次定义的形参
特点: 必须被传值
def func(x,y):
print(x,y)
(2) 位置实参:在函数调用阶段,按照从左到右的顺序依次传入的值
特点:按照位置与形参一一对应
func(1,2)
func(1,2,3)
func(1,)
func(1,2,3,4,5,)
2.2关键字实参:
在函数调用阶段,按照key=value的形式传值
特点: 可以打破传值的顺序,但仍能指名道姓地为形参赋值
func(y=2,x=1)
注意:可以混用位置实参与关键字实参,但是
(1)位置实参必须放在前面
(2)不能为同一个形参重复赋值
func(111,y=2)
func(y=2,111)
func(111,x=222,y=333)
2.3 默认形参:
在函数定义阶段,就已经为形参赋值,该形参称之为默认形参
特点: 调用时可以不用为默认形参传值
def func(x,y=222):
print(x,y)
func(111)
func(111,333)
注意:可以混用位置形参与默认形参,但是
(1) 位置形参必须放在前面
(2) 默认形参的值只在函数定义阶段赋值一次,拿到的一个内存地址
为函数的每次调用都是独立,默认形参的值通常应该是不可变
def func(y=222,x):
print(x,y)
m = 222
m = []
def func(x,y=m):
print(x)
print(y)
m = 333
m.append(44444444444)
func(111)
def func(name,hobby,hobbies=None):
# name=”egon”
# hobby=”music”
if hobbies is None:
hobbies = []
hobbies.append(hobby)
print(‘%s 的爱好是 %s’ %(name,hobbies))
func(‘egon’,’music’)
func(‘lili’,’read’)
func(‘jack’,’movie’)
#案例; def register(name,age,sex='male'): print(name,age,sex) register("sean",18) register("jack",19) register("tom",20) register("lili",21,'female')
三、 *与**在形参与实参的应用
可变长的实参指的是在调用函数时括号内传入的实参值的个数不固定
而实参无非两种格式:位置实参\关键字实参
对应着必须有专门的形参来接收溢出位置实参与关键字实参
3.1 *与**在形参中的应用
(1) *在形参中: *会把溢出的位置实参存成元组的形式,然后赋值给其后的形参名
def func(x,*args): # x=1,args=(2,3)
print(x,args)
func(1,2,3)
(2) **在形参中: **会把溢出的关键字实参存成字典的形式,然后赋值给其后的形参名
def func(x,**kwargs): # x=1,kwargs={“c”:3,”a”:1,”b”:2}
print(x,kwargs)
func(x=1,a=1,b=2,c=3)
3.2 *与**在实参中的应用
def func(x,y,z):
print(x,y,z)
(1) *在实参中:*会将实参值打散成位置实参
func(*[1,2,3]) # func(1,2,3)
(2) **在实参中:**会将字典格式的实参值打算成关键字实参
func(**{“a”:1,’b’:2,’c’:3}) # func(a=1,b=2,c=3)
func(**{“x”:1,’y’:2,’z’:3}) # func(x=1,z=3,y=2)
func(*”hello”) #
func(*{“aaa”:1,’bbb’:2,’ccc’:3}) # func(‘aaa’,’bbb’,’ccc’)
3.3 可以混用: **必须在*的后面
def wrapper(*args,**kwargs): # args=(1,2,3,4,5) kwargs={“a”:1,’b’:2,’c’:3}
print(args)
print(kwargs)
wrapper(1,2,3,4,5,a=1,b=2,c=3)
def wrapper(*args,**kwargs): # args=(“h”,”e”) kwargs={“a”:1,’b’:2,’m’:333,’n’:4444}
print(args)
print(kwargs)
wrapper(*’he’,a=1,b=2,**{‘m’:333,’n’:4444}) # wrapper(“h”,”e”,a=1,b=2,n=4444,m=333)
非常重要的一种格式
def index(x,y):
print(‘index===>’,x,y)
def wrapper(*args,**kwargs): # args=(1,2,3) kwargs={“a”:1,’b’:2,’c’:3}
index(*args,**kwargs) # index(*(1,2,3).**{“a”:1,’b’:2,’c’:3})
# index(1,2,3,a=1,b=2,c=3)
# index(1,y=2)
wrapper(1,y=2)
四、可变长参数
def index(x,y,z): print(x,y,z) def wrapper(*args,**kwargs): # args=(1,2,3,4,5) kwargs={"a":1,"b":2} index(*args,**kwargs) # index(*(1,2,3,4,5),**{"a":1,"b":2}) # index(1,2,3,4,5,a=1,b=2) # index(x=1,y=2,z=3) wrapper(x=1,y=2,z=3)
今天的文章函数的参数_涵参数是什么意思分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/47405.html