1.什么是函数
函数就是对实现某一特定功能的代码段的封装
2.函数的分类
内置函数(系统函数):python已经实现的函数,程序员之间使用,例如:print();input();max()等等,
相当于系统已经造好的机器
自定义函数:程序员自己定义的函数,相当于自己造机器
3.函数的定义(声明)
"""
1)语法
def 函数名(参数列表):
函数体
2)说明
def - 声明函数的关键字,固定写法
函数名 - 要求:标识符、不能是关键字
规范:见名知义(看见函数名能大概知道函数的功能)、所有字母都小写,多个单词用_隔开,不能与系统函数名重名
() - 固定写法
参数列表 - 形参1,形参2,形参3 …… ;参数可以没有,也可以有多个
变量名1,变量名2,变量名3 ……
形参的功能是将函数外的数据传递至函数内
: - 固定写法
函数体 - 必须与def保持一个缩进的代码段
函数体分为函数说明文档和实现函数功能的代码段两个部分
3)初学者声明函数的步骤:
第一步:确定函数的功能
第二步:根据功能确定函数名
第三步:确定参数,确定是否需要参数,需要几个参数
看实现函数的功能是否需要从函数外向函数内传输值,如果需要,需要几个
第四步:实现函数的功能
第五步:确定函数的返回值 (暂时不管)
"""
4.函数体在函数声明时,不会执行,调用后才会执行(重要)
5.函数调用
"""
1)语法:
函数名(参数列表)
2)说明
函数名 - 函数名必须是已经声明过的函数
() - 固定写法
参数列表 - 实参:对形参赋值的
值1,值2,值3
"""
def product(n=4):
result = 1
for x in range(1, n+1):
result *= x
print(result)
product(8)
1.函数的调用过程
"""
函数在声明的时候不执行函数体,调用函数的时候才会执行函数体
函数的调用过程:
1)回到函数声明的位置
2)用实参给形参赋值(传参) - 要保证每个参数都有值
3)执行函数体
4)确定返回值
5)回到调用函数处继续执行
"""
2.函数的参数
1)根据实参的写法将参数分为位置参数和关键字参数
位置参数:调用函数时让实参的位置与形参一一对应,然后保证每个形参都有值
关键字参数:实参列表以形参名=值得方式来调用函数,顺序可以与声明时不相同
注意:关键字参数与位置参数可以混合使用(位置参数必须在关键字参数前面)
def fun1(a, b, c):
print(a, b, c)
fun1(10, 20, 30)
fun1(a=10, c=20, b=30)
# 关键字参数与位置参数可以混合使用(位置参数必须在关键字参数前面)
fun1(10, c=20, b=20)
2)参数默认值
声明函数的时候,函数的形参可以设置默认值
注意:
a.声明函数时,没有默认值的必须放在前面,设置默认值放在后面
b.有默认值的参数调用时可以不用传参,没有默认值得参数必须传参
c.当传参时需要跳过某个或者某几个有默认值的参数,直接向之后的参数传参时,必须使用关键字传参
3)参数类型说明
a.给参数设置默认值,默认值是什么类型,参数就是什么类型
b.以'参数名:类型名"的方式说明参数类型
def func3(a, nums: list, b=0):
print(a + b, nums)
练习:写一个函数,函数的功能是统计一个列表中指定元素的个数
def counts(item1, list1: list):
n = 0
for item in list1:
if item1 == item:
n += 1
print(n)
list1 = [1, 2, 3, 4, 5]
list1.count(2)
4)不定长参数
a.声明函数时在形参前加*,可以将这个形参变成元祖,然后同时接受多个位置参数的值
注意:一个函数中可以同时有不定长参数与定长参数,不定长参数要放后面
如果出现定长参数放在不定长参数后面,那么不定长参数后面的定长参数调用的时候需要使用关键字参数传值
def func(*num):
print(num)
func(12, 23)
# b.声明函数时,在形参前加**,可以将这个形参变成字典,然后同时接受多个关键字参数值
def func(**num):
print(num)
func(a=1, b=2, c=9)
注意:原则上一个函数的参数中既可以有定长的也可以有一个的不定长和带两个的不定长;
如果同时存在与*的参数,带要在前面
练习:写一个函数求多个数的和,要求调用函数的时候既可以使用位置参数传参,也可以用关键字参数传参
def fl_sum(*arg, **kwargs):
sum1 = sum(arg)
for item in kwargs:
sum1 += kwargs[item]
print(sum1)
fl_sum(a=1, b=2)
1.什么是返回值
返回值得作用是将函数内部产生的数据传递到函数外
返回值就是函数调用表达式的值,就是return关键字后面的值
注意:函数调用表达式 - 调用函数的语句,它的结果就是这个函数的返回值;
- 通过函数调用表达式获取返回函数的返回值
2.return关键字
return只能出现在函数体中:
当执行函数体的时候遇到return,函数结束;并且会将return后的值作为函数的返回值返回
如果在执行函数体时没有遇见return,函数的返回值时None
3.函数的调用过程(完整版)记!!!
"""
1)先回到函数声明的位置
2)传参(每一个形参都有值)
3)执行函数体
4)确定返回值(执行完函数体中所有语句,没有遇见return,函数的返回值为None;
执行过程中遇见了return,函数的返回值为return后的值,如果return后无值,为None
5)回到函数调用处,继续执行。(此时函数调用表达式的值才是函数的返回值)
"""
4.什么时候函数虚有返回值
初学者建议:只要实现函数的功能产生了新的数据,就可以把产生的数据提供返回值返回
def fl_qi(num0, num1):
num0, num1 = num1, num1+num0
if num1 > 100:
return num1
return fl_qi(num0, num1)
a = fl_qi(0, 1)
print(a)
# python中一个函数可以有多个返回值;return后给多个值,用逗号隔开