文章目录
函数
一、函数的定义
函数就是对实现某一个特定功能的代码的封装;以后不用再重复写同一功能的代码,直接代用函数就行
二、函数的分类
从定义的角度将函数分为自定义函数和系统函数
- 自定义函数:程序员自己定义的函数
- 系统函数:系统已经定义好的函数(python本身就定义了的函数),程序员可以直接调用。例如:print函数、input函数、type函数、sum函数、max函数等。
三、定义函数
# 语法
def 函数名(形参列表):
函数说明文档
函数体
语法说明:
1 def - 关键字 固定语法
2 函数名 - 有程序员自己命名;
两个要求(标识符,不是关键字)
三个规范(见名知意;所有字母小写,多个单词用下划线隔开;不使用系统的的函数名,类名和模块)
3 (): - 固定写法
4 形参列表 - 以'变量1,变量2,变量3,...'的形式存在,每一个变量就是一个形参
形参的作用:将函数外部的数据传递到函数里面
确定形参的方法:看实现函数的功能需不需要额外的数据,需要多少个
5 函数说明文档 - 多行注释
6 函数体 - 结构上 和def保持一个缩进的语句;逻辑上 函数体就是实现函数功能的代码
四、函数的调用
# 语法
函数名(实参列表)
语法说明:
1 函数名 - 函数名必须是已经定义过的函数的函数名;需要哪个函数对应的功能,就调用哪个函数
2 () - 固定写法
3 实参列表 - 以'数据1,数据2,数据3,...'的形式存在,这儿的每个数据就是一个实参
实参是用来给形参赋值的,实参与形参一一对应
函数调用:定义函数不会执行函数体,调用函数的时候才会执行函数体
函数调用的过程
- 回到函数定义的位置
- 传参 实参给形参赋值,传参的时候必须保证每个形参都有值
- 执行函数体
- 确定函数返回结果
- 回到函数调用的位置,往后执行
五、函数的参数
1、位置参数和关键字参数
根据实参的提供方式将实参分为位置参数和关键字参数
- 位置参数:以’实参1,实参2,实参3,…'的形式存在,让实参和形参从位置上一一对应
- 关键字参数:以’形参1=实参1,形参2=实参2,…'的形式存在将实参和形参一一对应
注意:位置参数和关键字参数可以一起用,但是位置参数必须在关键字参数前面
def fun1(x,y,z):
print('x:',x,'y:',y,'z:',z)
fun1(1,2,3) # x: 1 y: 2 z: 3
fun1(x=1,z=3,y=2) # x: 1 y: 2 z: 3
fun1(1,z=3,y=2) # x: 1 y: 2 z: 3
2、参数默认值
-
定义函数的时候可以通过’形参名=数据’的方式给形参赋默认值
-
在调用函数的时候,有默认值的参数可以不用传参
注意:在定义函数的时候可以选择性的给默认值,有默认值的形参必须写在形参列表的最后
想要给 有默认值的参数 后面的参数传参,必须使用关键字参数传参
def fun2(x=10,y=20,z=30):
print('x:',x,'y:',y,'z:',z)
fun2() # x: 10 y: 20 z: 30
fun2(100) # x: 100 y: 20 z: 30
3、类型说明
提示函数调用者这个函数时什么类型的,调用什么值
-
没有默认值参数的类型说明:直接在形参后面加’:类型名’
-
有默认值的参数,默认值对应的数据类型就是形参的类型
-
返回值类型说明 ‘->类型名’ 写在在括号和冒号之间
def fun3(x:str)->str:
print(x)
fun3('s1a.434wed52adsf234')
print()
4、*对应的不定长参数
4.1 参数个数的不确定
定义函数的时候,如果在某一个形参前面加*
,那么这个参数就会变成一个不定长参数,可以接收多个形参
带*
的不定长参数的本质是一个元组,它接收到的所有的实参是这个元组中的元素
如果不定长参数后面还有参数,那么后面的参数只能是关键字参数传参
4.2定义函数的时候单独使用*
强迫在调用函数的时候,*
后面的所有参数只能用关键字参数传参
注意:函数定义的时候出现*
,只要是*
后面的形参都只能用关键字参数传参
def sumN(num1,num2,*num):
sum1=num1+num2
# sum1=sum(num)
for i in num:
sum1+=i
print(sum1)
sumN(1,1) # 2
sumN(1,2,3) # 6
def get_stu_info(name,age,*awards):
print(name,age,*awards)
get_stu_info('lili',19,'三好学生','优秀干部')
def fun4(x,*,y,z):
pass
# fun4(1,2,3) # 错误
fun4(1,y=2,z=3) # 正确
def fun5(x,*y,z,k):
pass
fun5(1,3,2,5,z=6,k=0) # 正确
六、函数返回值
函数返回值—函数声明的时候return后面的值就是函数的返回值;如果没有return,函数的返回值就是None
返回值的作用: 将函数里面的数据传递到函数外面
获取函数返回值:获取函数调用表达式的值–就是获取函数返回值;函数返回值能做的事情,函数调用表达式也能做。
什么时候用返回值:如果函数产生了新的数据,就将新数据作为函数的返回值、
一个函数只有一个返回值,一个函数只有一个return有效,如果需要返回多个数据,直接在return后面写多个数据
return除了可以返回数据,还会提前结束函数,return后面的语句都将不会执行。
def fun(x,y):
return x+y
print(fun(1,9)) # 10
def fun(x,y):
return x,y
result=fun(1,9)
print(result) # (1, 9)