python函数
一、函数(封装代码,高效的代码重用)
1、 函数就是将一段具有独立功能的代码块整合到一个整体并命名,在需要的位置调用这个名称即可完成对应的需求
函数在开发过程中,可以更高效的实现代码重用
2、 定义函数
def 函数名(参数):
代码1
代码2
调用函数
函数名(参数)
注意:不同的需求,参数可有可无
1)、函数必须先定义再使用
2)、如果没有调用函数,函数里面的代码不会执行
3)、函数执行流程:
当调用函数的时候,解释器回到定义函数的地方去执行下方缩进的代码,当这些代码执行完,回到调用函数的地方继续向下执行
定义函数的时候,函数体内部缩进的代码并没有执行
3、 函数参数的作用:函数调用的时候可以传入真实数据,增大函数的使用的灵活性
形参:函数定义时写的参数(非真实数据)
实参:函数调用时写的参数(真实数据)
4、 函数返回值:return返回结果给函数调用的地方
return作用:负责函数返回值
退出当前函数,导致return下方的所有代码(函数体内部)不执行
5、 函数说明文档
定义完函数1)第一行:“”“ 说明文字 ”“”
2)“”“
函数说明
参数1
参数2
返回值
”“”
查看:help(函数名)
6、 函数嵌套:一个函数里面又调用了另外一个函数
二、函数2
1、 变量的作用域:局部变量和全局变量
局部变量作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量
全局变量作用:在函数体内、外都能生效的变量
修改:global 变量名
2、 多返回值
return a,b 写法,返回多个数据的时候,默认是元组类型
return后面可以链接列表、元组或字典,以返回多个值
3、 参数
1) 位置参数:调用函数时根据函数定义的参数位置来传递参数
传递和定义参数的顺序及个数必须一致
2) 关键字参数:函数调用,通过“键=值”形式加以指定
函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序
3) 缺省参数:(默认参数)为参数提供默认值
调用函数时可不传该默认参数的值(所有参数必须出现在默认参数前,包括函数定义和使用)
函数调用时,如果为缺省参数传值则修改默认参数值,否则使用这个默认值
4) 不定长参数:(可变参数)用于不确定调用的时候会传递多少个参数(不传参也可以)
可以用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递
包裹位置参数:参数为*args
传进的所有参数都会被args变量收集,他会根据传进参数的位置合并为一个元组,args是元组类型
包裹关键字传递:参数为**kwargs
返回一个字典
无论包裹位置传递还是包裹关键字传递,都是一个组包的过程
4、 拆包
元组、字典
5、 交换变量值
1) 借助第三变量存储数据
2) x, y = y, x
6、 引用
Python中,值是靠引用来传递的
可以用id()来判断两个变量是否为同一个值的引用
引用可以当做实参
7、 可变类型:列表、字典、集合
不可变类型:整型、浮点型、字符串、元组
三、递归、lambda表达式(匿名函数)、高阶函数
1、 特点:函数内部自己调用自己
必须有出口
2、 如果没有出口,报错,超出最大递归深度
3、 一个函数有一个返回值,并且只有一句代码,可以使用lambda简化
语法: lambda 参数列表:表达式
注意:lambda的参数可有可无,函数的是参数在lambda中完全适用
lambda能接收任何数量的参数但只能返回一个表达式的值
1)带判断的lambda
print((lambda a, b: a if a > b else b)(1000, 500))
2)列表数据按字典key值排序
Students =[{‘name’:’tom’, ‘age’: 18}]
Stuents.sort(key = lambda x: x[‘name’’], reverse = True) 按姓名降序
False:降序
4、 参数形式:
无参数
一个参数
默认参数
可变参数*args :返回值为元组
可变参数**kwargs :返回值为字典
5、 高阶函数:把函数作为参数传入
内置高阶函数:
1):map(func,lst):将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表(python2)或者迭代器(python3)
2):reduce(func,lst):其中func必须有两个参数,每次func计算的结果继续和序列的下一个元素做累积计算(需导入函数functools)
3)filter(func,lst):用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象。如果要转换为列表,使用list()来转换