函数
-
什么是函数
函数就是对实现某一特定功能的代码段的封装
-
函数的分类
系统函数:系统已经封装好,直接调用使用
自定义函数:需要自己去定义
-
函数的定义/声明
-
语法:
def 函数名(参数列表):
函数体
-
说明:
def - python中声明函数的关键字
函数名 - 标识符,不能是关键字
PEP8命名规范,见名知意
() - 固定格式
参数列表 - 参数1,参数2,参数3...;这儿的参数叫形参
定义的时候形参就是变量
功能是将函数外面的数据传递到函数里
: - 固定格式
函数体 - 一个完整的函数体包含:函数说明文档,实现功能的代码段 -
初学者声明函数的步骤(老司机绕行)
第一步:确定函数功能
第二步:根据函数功能确定函数名
第三步:确定形参(是否需要参数,确定需要几个参数)
看实现函数的功能需不需要从外边传值,以及需要传几个
第四步:实现函数功能
第五步:确定函数返回值注意:声明函数的时候不会执行函数体!只有在调用的时候才会中
-
-
函数的调用
-
语法
函数名(实参列表)
说明
函数名 - 这个函数名对应的函数必须是已经声明过的函数
() - 固定写法
实参列表 - 实参是用来给形参赋值的 - 传参
实参和形参必须一一对应-
调用过程(重点)
第一步:回到函数声明的位置
第二步:实参赋值给形参(传参)
第三步:执行函数体
第四步:确定并返回返回值
第五步:回到函数调用的位置,接着执行后面的代码# 练习 声明一个函数,获取并打印一个列表中指定元素对应的下标 list1 = [1, 2, 3, 4, 5, 6, 1, 2, 3, 4] def inquire_index(list1: list, num1): for index in range(len(list1)): if list1[index] == num1: print(index) inquire_index(list1, 2) # 打印N的阶乘 def factorial_n(num): rpp = 1 for i in range(1,num+1): rpp *= i print(rpp) factorial_n(10)
-
函数中的参数
- 位置参数和关键字参数(根据实参的传递方式对参数进行的分类)
- 位置参数:实参的位置和形参的位置保持一致,按形参声明的先后顺序一一赋值
- 关键字参数:调用函数的时候以 形参 = 实参的方式来传参,这时候实参的顺序无所谓
def func1(a, b, c):
print(a, b, c)
# 通过位置参数给形参赋值
func1(10,20,30)
# 通过关键字参数传参
func1(c=30, a=10, b=20)
# 通过位置参数和关键字参数结合传参(注意:位置参数在前面,关键字参数在后面)
func1(10, 20, c=30)
-
参数默认值
声明函数的时候,可以给参数赋默认值。如果一个形参有默认值,那么调用函数的时候,这个参数就可以不用传参了
如果有的形参有默认值,有的形参没有默认值,那么有默认值的形参要放在没有默认值形参的后面。调用参数要保证每个参数都有值# 参数c有默认值是,调用函数可以不用传参 def func3(width=5, color='black', long=10): print('画一条长度是%d宽度是%d的%s线' % (long, width, color)) func3() func3(color='red')
-
参数的类型说明 -- 类型说明只有提示的功能没有约束功能
给参数设置默认值,默认值的类型就是参数的类型
形参:类型名 在形参后面加:类型名(list,dict,tuple,set)。这种方式必须传参
函数声明的()后面加 -> 类型名,来说明返回值的类型
-
类型说明的好处: a.对实参的类型进行说明指导
b.实现函数功能的时候有类型相关的语法提示def list_item(list1, index=0) -> int: print(list1[index]) return 10 list_item([1,2,3]) def func4(a: list, b: dict): a.append()
-
不定长参数 -- 函数参数个数不确定
-
声明函数的时候在形参名前加,可以用来同时获取多个实参的值 -- 实质是将带的参数变成元组,将多个实参的值作为元组的元素
注意:a.如果函数中既有不定长参数,又有普通参数,那么不定长参数必须放在普通参数的后面
b.两个的参数要放在一个的后面# 计算多个数的和 def num_sum(*nums): print(nums) def func5(name, *scores): print(name, scores) func5('郭锐', 90,20,53) num_sum(10, 20, 30) num_sum(20, 30, 40, 50)
-
在形参前加两个* -- 必须用关键字参数,对应的关键字作为key,而值作为value,从而形成一个字典
def func6(**nums): print(nums) func6(a=10, b=20) func6() # 写一个函数,计算多个数的和(要求可以使用位置参数,也可以使用关键字参数) def all_num_sum(*args, **kwargs): sum1 = 0 for item in args: sum1 += item for key in kwargs: sum1 += kwargs[key] print('和为%d' % sum1) all_num_sum(10, 20, a=30, b=40)
-
函数中的返回值
-
什么是返回值 - 返回值就是将函数里面的数据传递到函数外面
就是函数调用表达式的值,就是return 关键字后面的表达式的值
-
python中每个函数都有返回值,默认为None
函数调用表达式 - 调用函数的语句
return - 关键字,只能写在函数体中。 功能:1:确定函数的返回值 2.结束函数
执行函数的时候,如果遇到return,函数直接结束,并且将return后面的值作为返回值
回到函数调用的位置(这个时候函数对奥用的表达式的值就是函数的返回值)函数调用过程
回到函数声明位置
传参 - (保证每个参数都有值)
执行函数体
执行完函数确定返回值 -- 如果执行过程中没有遇到return,函数的返回值为None
遇到return,return后面是什么,返回值就是什么
def func1(): print('*******') return 0 print('=======') result = func1() #func1()就是函数调用表达式 print(result) def func2(): print(100) print(func2()) # 先打印100,然后打印None ,先执行函数,再打印返回值
-
多个返回值
return 值1,值2,值3 <==> (值1,值2,值3.···)def func3(): return 1,2,3 x,y,z = func3() print(x,y,z)