第三章python函数基础详解
一、函数1
函数的作用封装代码实现重用
函数使用步骤
函数参数的作用
函数返回值的作用
函数说明文档
函数嵌套
- 函数就是将一个具有独立功能的代码块整合成一个整体
- 定义函数
def 函数名(参数):
代码1
return 表达式
、、、 - 调用函数
函数名(参数)
函数需要先定义后使用
当调用函数的时候解释器会执行函数,调用完成后向下执行 - 函数的说明文档
定义函数后用来提示作用
def 函数名(参数):
“”" 说明文档的位置 “”"
代码
、、、 - help(函数名)//查看函数的说明文档
- 函数的嵌套调用
def testA():
代码
、、、
def testB():
testA()
代码
、、、 - 除法中的结果都是浮点数
二、函数2
变量作用域//变量的作用范围
多函数程序执行流程
函数的返回值
函数的参数
拆包和交换两个变量的值
引用
可变和不可变类型
- 定义在函数内部变量//局部变量
- 定义在函数体外//全局变量
在函数内部 全局变量名字=值//不能修改全局变量,而是重新定义了一个同名的局部变量
def testA()
global 全局变量名//使用global来声明全局变量
全局变量名 = 值
、、、、 - 多函数程序执行流程
一个程序有多个函数组成,并且多个函数共享某些数据。
共用全局变量
返回值作为参数传递 - 函数的返回值
一个函数里只能有一个return
def 函数名字:
return 1,2//返回的是一个元组//如果是return 1,2,3??元组
返回多个数据默认为元组
return 后面可以连接列表,元组或字典,以返回多个值 - 函数的参数
位置参数:调用函数时根据函数定义的参数位置来传递参数
def test(param1 , param2 ,param3):
代码1
、、、
test(a,b,c)
关键字参数:通过键 = 值加以指定
test(param1 = a,param2 = b,param3 = c)
函数调用时位置参数必须在关键字参数前面,关键字参数位置可变
缺省参数:也叫默认参数为参数提供默认值,调用函数可不传默认值
有默认值但又传入新的值,用新值
不定长参数:也叫可变参数。用于不确定调用的时候会传递多少个参数。此时可使用包裹(packing)位置参数,或者包裹包裹关键字参数
包裹位置传递
def test(*args):
print(args)
test(‘Tom’) or test(‘Tom’,‘18’)
传进的所有参数都会被args变量接受,他会根据传进参数的位置合并为一个元组。一个参数也是元组
包裹关键字传递
def test(**kwargs):
print(kwargs)
test(name = ‘TOM’,age = 18)
返回一个字典
无论是包裹位置还是包裹关键字传递都是一个组包的过程 //收集零散数据返回一个整体是组包的过程 - 拆包和交换变量值
拆包:元组
def test():
return 100,200
num1,num2 = test()
拆包:字典
dict1 = {‘name’:‘YOM’,‘age’:18}
a,b=dict1//取出来的a,b都是key
值需要dict1[a],dict1[b] - 交换变量值
方法一:借助第三变量存储数据
方法二:
a,b = 1,2
a,b = b,a//即可完成交换 - 引用
在python中,数据是靠引用来传递的
使用id(变量)来判断两个变量是否为同一个值的引用。我们可以将id值理解为那块内存的地址标识。
list数据类型自加后得出来得id一样???list是可变类型
引用可以作为参数传递 - 可变和不可变类型
可变类型:list、dict、set、
不可变类型:整型、浮点型、字符串、元组
三、函数3
学员管理系统
递归
lambda表达式
高阶函数
- 需求:进入系统显示系统功能界面,功能如下:
添加学员、删除学员、修改学员信息、查询学员信息、显示所有学员信息、退出系统 - 步骤分析:
显示功能界面
用户输入功能序号
执行序号功能
定义函数
调用函数 - 需求实现
四、递归
函数内部自己调用自己
必须有出口//如果没有出口会报错,超出最大递归深度
大问题变成小问题向下求解向上返回
五、lambda表达式
- 如果一个函数有一个返回值,并且只有一句代码,可以用lanbda简化
- (lambda 参数列表:表达式)(传入参数值1,传入参数值2) //则可以直接用变量接受
- lambda表达式得参数可有可无。
- lambda函数能接收任意数量得参数但只能返回一个表达式的值
- 函数名 = lambda: 表达式
- 如果print(函数名)//打印出来的是内存地址
应该print(函数名()) - 列表数据按照字典的key排序
list = [{},{},{}、、、]
list.sort(key = lambda x:x[‘某key’],reverse = bool数据 )
六、高阶函数//化简代码增加灵活性
把函数作为参数传入,这样的函数称为高阶函数。
高阶函数是函数式编程的体现
-
方法1在一个函数里调用另外一个函数
方法2:将另外一个函数作为参数传入函数
def test(a,b,f)
return f(a) +f(b)
result = test(-1,2,函数名)
方法2叫函数式编程 -
内置高阶函数
map(func,list)//将传入的函数变量func作用到list变量的每个元素中,结果返回迭代器。python2为列表。
返回的迭代器需要使用print(list(接受迭代器的变量))//转换为列表数据,如果直接打印迭代器只能看到内存地址
reduce(func(x,y),list)//func必须有两个参数。每次func计算的结果继续和序列的下一个元素做累积计算//累积计算???
import functools
list = [1,2,3]
def func(a,b)
return a+b
result = functools.reduce(func,list) -
filter(func,lst)//用于过滤序列中不符合条件的元素,返回一个filter对象,可以使用list()来转换 filter是什么???
ctrl + D向下复制 -
两个小函数:round(数据)//进行四舍五入 abs(数据)//求绝对值