一、return返回值
return的两个作用:
1)需要用一个变量来接受程序结束后返回的结果
2)它是作为一个结束符,终止程序运行
1 def test(): 2 print("我是return前的命令") 3 return 0 4 print("我是return后的命令") 5 6 x = test() 7 print(x) 8 9 #输出 10 我是return前的命令 11 0 #结果返回值
从上面的代码可以看出,return 0 后面的代码停止执行了,程序只打印了return前面的代码,而函数的返回值0复制给
了变量x。
二、函数参数与局部变量
在此之前,我们演示的函数都是没有带参数的,下面我们就来说说带参数的函数。在讲之前,我们先来说一下,什么是形参,什么是实参吧!
- 形参:指的是形式参数,是虚拟的,不占用内存空间,形参单元只有被调用的时才分配内存单元
- 实参:指的是实际参数,是一个变量,占用内存空间,数据传递单向,实参传给形参,形参不能传给实参
代码如下:
1 def test(x,y): #x,y是形参 2 print(x) 3 print(y) 4 5 test(1,2) #1和2是实参 6 #输出 7 1 8 2
1、位置参数
从上面的例子可以看出,实际参数和形式参数是一一对应的,如果调换位置,x和y被调用的时,位置也会互换,代码如下:
1 def test(x,y): 2 print(x) 3 print(y) 4 print("--------互换前-----") 5 test(1,2) 6 print("--------互换后-----") 7 test(2,1) 8 9 #输出 10 --------互换前----- 11 1 12 2 13 --------互换后----- 14 2 15 1
在实参数>虚参数的时候,会因为参数不对应报错:
1 def test(x,y): 2 print(x) 3 print(y) 4 print("--------多一个参数----") 5 test(1,2,3) 6 7 #输出 8 --------多一个参数---- 9 Traceback (most recent call last): 10 File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8, in <module> 11 test(1,2,3) 12 TypeError: test() takes 2 positional arguments but 3 were given #test()函数需要传两个实参,你传了三个实参
同理,当实参数<虚参数的时候,也会因为参数不对应报错:
1 def test(x,y): 2 print(x) 3 print(y) 4 print("--------少一个参数----") 5 test(1) 6 7 #输出 8 --------少一个参数---- 9 Traceback (most recent call last): 10 File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8, in <module> 11 test(1) 12 TypeError: test() missing 1 required positional argument: 'y' #没有给y参数传实参
2、关键字参数
关键字传参不需要一一对应,只需要你指定你的哪个形参调用哪一个实参即可,代码如下:
1 def test(x,y): 2 print(x) 3 print(y) 4 5 print("--------互换前------") 6 test(x=1,y=2) 7 print("--------互换后------") 8 test(y=2,x=1) 9 10 #输出 11 --------互换前------ 12 1 13 2 14 --------互换后------ 15 1 16 2
位置参数与关键字参数结合:
1)位置参数在前,关键字参数在后。
1 def test(x,y): 2 print(x) 3 print(y) 4 5 test(1,y=2) 6 7 #输出 8 1 9 2
2)但是下面这种情况是错误的。这时候形参由于赋值过多,不能多次
1 def test(x,y): 2 print(x) 3 print(y) 4 5 test(1,x=2) 6 7 #输出 8 Traceback (most recent call last): 9 File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8, in <module> 10 test(1,x=2) 11 TypeError: test() got multiple values for argument 'x' #给x形参传的值过多
3)关键字参数在前,位置参数在后
1 def test(x,y): 2 print(x) 3 print(y) 4 5 test(y=2,1) 6 7 #输出 8 File "D:/PycharmProjects/pyhomework/day3/函数_带参数.py", line 8 9 test(y=2,1) 10 ^ 11 SyntaxError: positional argument follows keyword argument # 关键字参数在位置参数的前面
4)一个位置参数,两个关键字参数
1 def test(x,y,z): 2 print(x) 3 print(y) 4 print(z) 5 6 test(1,z=2,y=3) 7 8 #输出 9 1 10 3 11 2
总结:关键字参数是不能写在位置参数前面的