目录
学习目标
初步掌握python函数、类相关知识
学习内容
1.函数
2.Lambda表达式
3.类与对象
4.魔法方法
学习时间
2020/12/5 15:00-18:00
学习产出
函数
1.定义
2.函数文档和调用
调用functionname(paarameters)
函数文档functionname._doc_
3.函数参数
python函数参数非常灵活,有五种类型:位置参数、默认参数、可变参数、关键字参数、命名关键字参数
3.1位置参数
位置参数在函数调用时,以和函数定义时相同的固定顺序传入,或者使用关键字方式调用(可以打乱顺序),但是关键字形式的参数一定要在无关键字按固定顺序传入的参数之后
3.2默认参数
在函数定义时被赋值的位置参数,默认参数总是要放在位置参数的右边。在函数调用时,如果默认参数没有实参传入,则使用默认值
3.3可变参数
在函数定义时,使用通配符,*arg
可以获取不定长的位置参数,以元组形式保存在arg中
可变参数要放置于位置参数和默认参数之后,假设放置于位置参数之前会报错,放置于默认参数之前则默认参数永远不会得到实参值
3.4关键字参数
**kw
函数调用时,将任意个键值对(key=value),封装成字典
3.5命名关键字参数
在函数定义中,*,arg
在函数调用时,必须使用关键字名
3.6参数组合
有两种方式
位置参数、默认参数、可变参数和关键字参数。
位置参数、默认参数、命名关键字参数和关键字参数。
其中,可变参数和命名关键字参数不能一起使用
4.函数返回值
return语句可有可无,return后面可加可不加表达式
没有return或者return后面没有返回的表达式,函数返回值为None
5.变量作用域
定义在函数内部的变量拥有局部作用域,该变量称为局部变量。
定义在函数外部的变量拥有全局作用域,该变量称为全局变量。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。
注意,在函数内部访问全局变量,相当于创建一个指向相同内存的引用,所以如果在函数内部改变和全局变量相同变量名的引用的指向,并不会改变全局变量的值
如果想要在函数内部的局部作用域内修改全局变量引用的指向,需要使用global关键字
对于嵌套函数,如果内部函数想要改变外层函数的额变量值,可以使用nonlocal关键字
Lambda表达式
匿名函数
在 Python 里有两类函数:
第一类:用 def 关键词定义的正规函数
第二类:用 lambda 关键词定义的匿名函数
匿名函数的应用
filter(function, iterable) 过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。
map(function, *iterables) 根据提供的函数对指定序列做映射。
类与对象
对象是类的实例。换句话说,类主要定义对象的结构,然后我们以类为模板创建对象。类不但包含方法定义,而且还包含所有实例共享的数据。
面向对象思想
1.封装:信息隐蔽技术 让使用者调用提供的接口,而不需要关心内部实现
2.继承:子类自动共享父类之间数据和方法的机制 灵活创建各种类型
3.多态:不同对象对同一方法响应不同的行动 子类可以重写父类的方法
Python 的 self 相当于 C++ 的 this 指针。调用实例方法,必须涉及实例对象,必须获得指向对象的引用
公有和私有
默认变量是公有的,在前面加两个下划线就成了私有变量
继承
组合
在类中使用其他类的对象
类、类对象和实例对象
一些相关的内置函数(BIF)
魔法方法
魔法方法总是被双下划线包围,例如__init__
魔法方法的第一个参数应为cls(类方法) 或者self(实例方法)。
cls:代表一个类的名称
self:代表一个实例对象的名称
基本魔法方法
若__new__没有正确返回当前类cls的实例,那__init__是不会被调用的,即使是父类的实例也不行,将没有__init__被调用。
一般只有当指向一个对象的所有引用都被del后,该函数才被调用
算术运算符
类型工厂函数,指的是“不通过类而是通过函数来创建对象”。
反算术运算符
反运算魔方方法,与算术运算符保持一一对应,不同之处就是反运算的魔法方法多了一个“r”。当文件左操作不支持相应的操作时被调用。
增量赋值运算符
一元运算符
属性访问
描述符
序列
协议(Protocols)与其它编程语言中的接口很相似,它规定你哪些方法必须要定义。然而,在 Python 中的协议就显得不那么正式。事实上,在 Python 中,协议更像是一种指南。
容器类型的协议
如果说你希望定制的容器是不可变的话,你只需要定义__len__()和__getitem__()方法。
如果你希望定制的容器是可变的话,除了__len__()和__getitem__()方法,你还需要定义__setitem__()和__delitem__()两个方法。
迭代器
迭代是 Python 最强大的功能之一,是访问集合元素的一种方式。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。
迭代器只能往前不会后退。
字符串,列表或元组对象都可用于创建迭代器
生成器
在 Python 中,使用了 yield 的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
调用一个生成器函数,返回的是一个迭代器对象