函数是执行特定任务和完成特定功能的一段代码
#a,b为形参,函数调用时()里的是实参
def add(a,b):
c=a+b
return c
#输出5
print(add(1,4))
函数调用时的参数传递
位置实参:根据形参对应的位置进行实参传递
关键字实参:根据形参名字进行实参传递
#a,b为形参,函数调用时()里的是实参
def add(a,b):
c=a+b
return c
#位置实参
print(add(1,4))
#关键字实参
print(add(a=1,b=4))
print(add(b=4,a=1))
当需要设定参数只能使用关键字实参时,可以在定义函数时在该参数前加*,例如def func(a,b,*,c,d),现在,c和d都只能使用关键字实参
内存分析:
进行 函数调用时,进行参数传递,如果是不可变对象,在函数体内内的修改不会影响实参的值
函数的返回值
函数返回多个值时,返回的是数组 ,返回一个值时,直接返回类型,没有返回时,可以省略return语句
def test(a,b):
a*=2
b*=2
return a,b
#(2, 8)
print(test(1,4))
函数的参数定义
在给函数定义形参时,可以给形参设置默认值,只有在与默认值不符合的情况下才需要对这个形参进行参数传递,注意,设置了默认值的形参需要放在最后
def test(a,b,c=2):
a*=c
b*=c
return a,b
#(2, 8)
print(test(1,4))
#传递了c
#(3, 12)
print(test(1,4,3))
有时在定义函数时,可能无法确定传递的位置实参的个数,此时使用*定义可变数量的位置实参,实现传递可变数量的位置实参,此时传递的是一个元组
有时在定义函数时,可能无法确定传递的关键字实参的个数,此时使用**定义可变数量的关键字实参,实现传递可变数量的关键字实参,此时传递的是一个字典
#传递可变数量的位置形参
def test(*a):
ans=0
for x in a:
ans+=x
return ans
#5
print(test(1,4))
#8
print(test(1,4,3))
#传递可变数量的关键字参数
def test1(**a):
for i,v in a.items():
print(i+'='+str(v),end='\t')
#a=1 b=3
test1(a=1,b=3)
#name=lili age=20 place=London
test1(name='lili',age=20,place='London')
注意,在定义函数时,可变数目的关键字形参只能有一个,可变数目的位置形参也只能有一个,当一个函数中即有可变数目的关键字形参又有可变数目的位置形参时,可变数目的位置形参放在可变数目的关键字形参之前
函数调用时调用列表或字典
在函数调用时,如果直接调用列表或字典,那么就是将其作为一个参数传入函数中。
如果想要将列表中的值作为位置参数传入函数,那么可以使用*
如果想要将字典中的值作为关键字参数传入函数,那么可以使用**
def test(a,b,c):
print(a,'+',b,'+',c,'=',a+b+c)
lis=[1,2,3]
dic={'b':4,'c':5,"a":3}
#将列表中的值作为位置参数传入函数
#1 + 2 + 3 = 6
test(*lis)
#将字典中的值作为关键字参数传入函数
#3 + 4 + 5 = 12
test(**dic)