python进阶 廖雪峰(慕课网)
1.函数式编程
变量名可以指向函数,那么函数就可以通过一个变量传递给另一个函数或者变量。
map()函数:接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的list 并返回。(注意不改变原有的list)
reduce()函数:接收一个函数 f 和一个 list,传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值,reduce()还可以接收第3个可选参数,作为计算的初始值。
filter()函数:接收一个函数 f 和一个 list,函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。
自定义排序函数:sorted()函数默认对list从小到大进行排列。sorted函数的作用是接受一个比较函数对序列进行排列,而这个比较函数会根据返回值是-1,就会把 x 排在 y 前面,返回值是1,就会把 x 排在 y 后面,返回值为0,就把两者并排。sorted()也可以对字符串进行排序,字符串默认按照ASCII大小来比较。
Python中返回函数:Python的函数不但可以返回int、str、list、dict等数据类型,还可以返回函数。 打印时需要注意返回值从而判断 print f 还是 print f()。
Python中闭包:内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure)。返回函数不要引用任何循环变量,或者后续会发生变化的变量。
Python中匿名函数: lambda x: x * x ,关键字lambda 表示匿名函数,冒号前面的 x 表示函数参数。strip()方法语法:str.strip([chars]);chars -- 移除字符串头尾指定的字符序列。
Python中decorator装饰器:
本质上就是一个高阶函数,它接收一个函数作为参数,然后,返回一个新函数。
使用 decorator 用Python提供的 @ 语法,装饰器顾名思义就是起到装饰作用,即进行一些类似日志、运行时间的统计,其本质为内嵌套函数。
对于自适应任何参数定义的函数,可以使用Python的 *args 和 **kw,就这两个放在参数位置即可保证任意个数的参数总是能正常调用。
带参数的装饰器,带参数的log函数首先返回一个decorator函数,再让这个decorator函数接收my_func并返回新函数,之后再装饰器函数中进行例如log、计算运行时间等实现。Py
Python中偏函数:可以简化参数。当一个函数有很多参数时,调用者就需要提供多个参数。如果减少参数个数,就可以简化调用者的负担。
Python中的模块
模块和包的概念:模块是一个Python文件,包是一个文件夹。Python包里面有一个_init._.py文件,用来和普通目录做区别。
导入模块:improt导入模块 from logging import log导入模块中的一个函数 from logging import log as logger给导入模块的函数起一个别名
动态导入:先尝试从cStringIO导入,如果失败了(比如cStringIO没有被安装),再尝试从StringIO导入。提高运行速度。
try: from cStringIO import StringIO except ImportError: from StringIO import StringIO
__future__:当新版本的一个特性与旧版本不兼容时,该特性将会在旧版本中添加到__future__中,以便旧的代码能在旧版本中测试新特性。from __future__ import division
安装第三方模块:pip www.pypi.python.org
面向对象编程
Python中初始化实例属性:_init__() 方法的第一个参数必须是 self(也可以用别的名字,但建议使用习惯用法),后续参数则可以自由指定
Python中访问限制:如果一个属性由双下划线开头(__),该属性就无法被外部访问。(__xxx__)除外
Python中创建类属性:如果在类上绑定一个属性,则所有实例都可以访问类的属性,并且,所有实例访问的类属性都是同一个!也就是说,实例属性每个实例各自拥有,互相独立,而类属性有且只有一份。
Python中类属性和实例属性冲突:当实例属性和类属性重名时,实例属性优先级高,它将屏蔽掉对类属性的访问。注意:千万不要在实例上修改类属性,它实际上并没有修改类属性,而是给实例绑定了一个实例属性。
Python中定义实例方法:实例的方法就是在类中定义的函数,它的第一个参数永远是 self,__init__(self, name)其实也可看做是一个特殊的实例方法
Python中方法也是属性: class 中定义的实例方法其实也是属性,它实际上是一个函数对象, types.MethodType(函数,实例,类) 把一个函数变为一个方法 p1.get_grade = types.MethodType(fn_get_grade, p1, Person)
Python中定义类方法:通过标记一个 @classmethod,该方法将绑定到 Person 类上,而非类的实例。类方法的第一个参数将传入类本身,通常将参数名命名为 cls
类的继承
Python中继承一个类:函数super(Student, self)将返回当前类继承的父类,即 Person ,然后调用__init__()方法,注意self参数已在super()中传入,在__init__()中将隐式传递,不需要写出(也不能写)
Python中判断类型:函数 isinstance(变量,类型) 可以判断一个变量的类型
Python中多态:需要深入学习
Python中获取对象信息:type() 函数获取变量的类型, dir() 函数获取变量的所有属性,dir()返回的属性是字符串列表,如果已知一个属性名称,要获取或者设置对象的属性,就需要用 getattr() 和 setattr( )函数
定制类
Python中定义了__str__()和__repr__()两种方法,__str__()用于显示给用户,而__repr__()用于显示给开发人员。__repr__() = __str__()
Rational类虽然可以做加法,但无法做减法、乘方和除法,请继续完善Rational类,实现四则运算
Python的@score.setter是前一个@property装饰后的副产品。
Python如果要限制添加的属性,__slots__是指一个类允许的属性列表。