黑马程序员技术交流社区

标题: 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