黑马程序员技术交流社区
标题:
python基础之函数的高级应用总结
[打印本页]
作者:
zcy50314399
时间:
2018-10-6 14:00
标题:
python基础之函数的高级应用总结
1. 默认参数
1.1默认参数概念
默认参数指函数/方法在定义时为形参赋值,对应的形参称为默认参数。默认参数是一个参数定义期的概念,与调用无关。
1.2默认参数作用
如果参数定义默认参数,在调用函数/方法时,未对该参数进行传值,则使用默认值作为该参数的值。
1.3默认参数基本语法
定义格式:
def 函数名(形参1 = 值1,…):
函数体
……
调用格式一(同普通参数,无特殊):
函数名(实参) 使用实参作为形参的值,不使用默认值
调用格式二:
函数名() 使用默认值作为形参的值
1.4注意事项
1.默认参数的定义必须在位置参数的右侧
2.默认参数在调用传值时,按照位置参数进行对待,从左至右依次赋值,不能跳过左侧的某个参数直接为后面的参数赋值
2. 关键字参数
2.1关键字参数概念
函数/方法在调用时为指定名称的形参进行赋值,对应实参称关键字参数。
关键字参数是一个参数调用期的概念,与定义无关。
2.2关键字参数作用
按名称确认实参为指定的形参赋值。
2.3关键字参数基本语法
定义格式(同普通参数定义,无特殊):
def 函数名(形参 ,…):
函数体
……
调用格式:
函数名( 形参名 = 实参)
2.4注意事项
1.关键字参数必须出现在位置参数的后面
2.不允许使用关键字参数对同一个形参进行多次赋值
3.关键字参数既可以为位置参数赋值,也可以为默认参数赋值。通常使用关键字参数解决默认参数选择性赋值问题。
3. 可变参数
3.1可变参数概念
函数/方法在定义时,定义一个特殊的形参,用于接收调用时传入的任意数量的实参,对应的形参称为可变参数。
可变参数是一个参数定义期与调用期都有效的概念。
3.2可变参数作用
简化函数定义过程,定义可以接收无数个实参的形参,形参接受到的数据,无论数量多少,包装成一个元组对象
3.3可变参数基本语法
定义格式:
def 函数名(*args ,…):
函数体
……
调用格式(同普通参数,无特殊):
函数名( 实参1,…… )
3.4注意事项
1.可变参数在一个函数/方法定义中只能出现一个
2.可变参数只能出现在位置参数的后面,位置参数在左侧,可变参数在右侧
3.关键字参数只能出现在位置参数的后面,赋值时必须使用关键字参数传值,否则值会被可变参数接收
4.定义函数的参数时,先定义位置参数,再定义可变参数,最后定义默认参数
4. 字典参数
4.1字典参数概念
函数/方法在定义时,定义一个特殊的形参,用于接收未定义直接使用的关键字参数,对应的形参称为字典参数。
4.2字典参数作用
简化函数定义过程,接收未定义直接使用的关键字参数。
在多层级调用间进行关键字参数的逐级传递。
未定义的关键字参数,无论数量多少,接收后包装成一个字典对象。
4.3字典参数基本语法
定义格式:
def 函数名(**kwargs ,…):
函数体
……
调用格式:
函数名( 未定义的变量名1 = 实参1,未定义的变量名2 = 实参2,…… )
4.4注意事项
1.字典参数在一个函数/方法定义中只能出现一个
2.定义函数的参数时,先定义位置参数,再定义可变参数,然后定义默认参数,最后定义字典参数
4.5其他
所有的容器都支持解包操作,格式:*容器变量名
5. 递归函数
5.1递归函数概念
函数/方法在执行过程中出现了对自身函数/方法的调用,称该过程为递归调用,称这样的函数为递归函数。
5.2递归函数基本语法
同普通函数
5.3递归函数定义要求
1.函数体中具有对自身函数的调用
2.函数体中具有明确的函数执行结束判定条件
5.4递归函数调用要求
Python语言中函数调用最大层级为1000层,超过该层级,程序将报错(不同语言设置不同)
6. 匿名函数
6.1匿名函数概念
匿名函数即没有名称的函数,在python语言中,匿名函数是使用lambda关键字定义的一个特殊表达式,也称为lambda表达式。
6.2匿名函数基本语法
格式一:
定义: 函数名 = lambda 形参 : 返回值
调用: 结果 = 函数名(实参)
格式二:
定义并调用: 结果 = (lambda 形参 : 返回值)(实参)
6.3匿名函数特殊语法
无参格式: 结果 = (lambda :返回值)()
多返回值格式: 无,可使用数据存储模型返回多个数据
无返回值格式: 无,必须有具体值或结果为None
7. 引用
7.1引用的概念
引用是一种变量指向数据存储空间的现象
内存地址是数据在物理内存中的存储位置
引用地址是对象在内存中的描述性地址,该地址与内存地址有区别
7.2引用特征
相同数据在内存空间中仅占用一个存储空间,不同的变量使用相同的数据则指向相同的存储空间
7.3如何获取内存存储地址(编号)
语法格式:
id(数据)
id(变量名)
1.4地址存储的几个特殊性
使用固定内存地址存储数据如下:
-5到256的整数
True和False
由字母、数字、下滑线组成的字符串
使用临时内存地址存储数据如下:
小于-5后大于256的整数
所有小数
包含字母、数字、下滑线之外的字符组成的字符串
8. 列表引用
2.1列表存储空间
无变量引用
列表保存在临时引用地址中,该引用地址可以反复使用
有变量引用
列表保存在独立引用地址中,该引用地址专用,每个列表对象具有独立的引用地址
2.2如何变更列表存储空间
1.列表变量指向引用地址,引用地址中存储的是存储列表信息的内存地址
2.当列表中存储数据的空间不足时,会申请新的内存地址,并更新引用地址中对应的内存地址
3.重新申请的内存地址将复制原始内存中的数据
2.3列表中的数据如何存储
1.列表中存储的数据都是数据对应的内存地址,没有真实数据
2.列表中的数据是通过引用地址的形式查找真实数据
9. 元组引用
9.1元组的存储空间
空元组(无数据)
空元组指向统一的独立引用地址,所有空元组共用同一个引用地址
非空元组(有数据)
非空元组保存在独立引用地址中,每个元组对象具有独立引用地址
注:由于元组不支持修改,不存在重新申请空间的问题,元组创建的同时存储的数据已经固定,内存结构也固定。
3.2元组中的数据存储(同列表)
1.元组中存储的数据都是数据对应的内存地址,没有真实数据
2.元组中的数据是通过引用地址的形式查找真实数据
注:元组不支持修改,但是元组中的数据如果是引用类型的,对应的数据可以在自身的内存地址中进行数据变更,对元组不影响。
10. 集合引用(同列表)
4.1集合存储空间
无变量引用
集合保存在临时引用地址中,该引用地址可以反复使用
有变量引用
集合保存在独立引用地址中,该引用地址专用,每个集合对象具有独立的引用地址
4.2集合存储空间变更
1.集合变量指向引用地址,该引用地址中保存有存储集合信息的内存地址。
2.当集合中存储数据的空间不足时,会申请新的内存地址,并更新引用地址中对应的内存地址。
3.重新申请的内存地址将复制原始内存地址中的数据。
4.3集合中的数据存储
1.集合中存储的数据都是数据对应的内存地址,没有真实数据
2.集合中的数据是通过引用地址的形式查找真实数据
11. 字典引用(同列表)
5.1字典存储空间
无变量引用
字典保存在临时引用地址中,该引用地址可以反复使用
有变量引用
在•
5.2字典存储空间变更
1.字典变量指向引用地址,该引用地址中保存有存储字典信息的内存地址。
2.当字典中存储数据的空间不足时,会申请新的内存地址,并更新引用地址中对应的内存地址。
3.重新申请的内存地址将复制原始内存地址中的数据。
5.3字典中的数据存储
1.字典中存储的数据都是数据对应的内存地址,没有真实数据
2.字典中的数据是通过引用地址的形式查找真实数据
12. 对象引用
6.1对象存储空间
无变量引用
对象保存在临时引用地址中,该引用地址可以反复使用
有变量引用
对象保存在独立引用地址中,该引用地址专用,每个列表对象具有独立的引用地址
6.2对象中的变量数据
1.对象中的变量存储的都是对应数据的引用地址,没有真实数据
2.对象中的变量是通过引用地址的形式查找真实数据
3.对象中的变量存储形式是一个字典的形式,对变量的操作参照字典的操作方式,变量名为字典的key,变量值为字典的value
13. 可变类型与不可变类型
7.1基本概念
数据存储空间中的数据可以发生变化的数据称为可变类型数据
数据存储空间中的数据不能发生变化的数据称为不可变类型数据
7.2分类
可变类型数据
列表
集合
字典
对象
不可变类型数据
数值
字符串
布尔
元组
7.3函数调用时的实参
函数的实参使用可变类型数据时,在函数内部对形参进行数据操作,实参将发生改变
函数的实参使用不可变类型数据时,在函数内部对形参进行数据操作,实参将不会发生改变
7.4函数定义时的形参
条件1:函数形参使用默认参数
条件2:函数调用时未对默认参数传值
条件3:函数的形参使用可变类型数据
上述3个条件同时满足时,多次调用对应函数时,操作的形参是同一个对象
1.对象的创建
1.1__new__方法作用
__new__方法用于定义创建对象时执行的操作,__new__方法仅仅为用户提供一个创建对象时干预的入口,真正执行创建对象的操作由object类中的__new__方法完成。
1.2__new__方法定义
定义__new__方法是对object类中__new__方法的重写,重写该方法时必须再次调用object类中的__new__方法。
1.3__new__方法调用
__new__方法在创建对象时自动运行,无需手工执行调用该方法。
2.对象的删除
2.1del操作作用
del操作的实质是断开变量与内存数据之间的引用,操作del执行后等同于对应变量未进行过定义。
2.2del操作执行范围
1.删除定义的变量:功能等同于变量未定义
2.删除存储模型中的数据:将数据按照变量的形式看待,功能等同于未定义过对应的数据
列表数据报错:索引不存在
元组对象报错:元组对象不支持对项的删除
字典对象报错:键错误,键不存在
3.对象中的属性:对应对象等同于该对象未定义过该属性
2.3__del__方法作用
__del__方法用于定义对象不存在任何引用时执行的操作。当对象断开了与最后一个变量之间的引用关系时,将执行该对象的__new__方法。
2.4__del__方法执行范围
1.当手工执行断开变量与对象的最后一个引用时执行,即del操作
2.当程序执行完毕时,所有变量对应的引用都断开,此时执行,即退出程序
2.5__del__方法调用
__del__方法在对象断开与最后一个变量之间的引用关系时自动执行,无需手工执行调用该方法。
3.对象判等
3.1对象判等概念
当两个对象对应的引用地址相同时,称这两个对象是同一个对象。
3.2对象判等语法格式
对象引用地址判等:
对象名 is 对象名 或 变量名 is 变量名
数据引用地址判定:
数据 is 数据
注:判等操作的结果是True或False
3.3 ==与is的区别
==操作针对判定的内容不同,规则不同。例如数值性数据比较数值的大小,不考虑是整数还是小数。字符串比较字符串的内容是否相同,不考虑引用地址是否相同。
is操作只针对地址进行判定,只要地址相同即返回True,否则返回False
ladycode
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2