lambda 表达式
- 无名或匿名函数对象
- lambda a,b:a+b
- f = lambda a,b,c:a+b+c
print f(1,2,3)
递归
- 取代循环的一种方法
- 阶乘的计算:
- 例子:
def fac(n):
if(n==1):
return 1
else:
return n*fac(n-1)
闭包
- 函数的嵌套,函数在内部被返回。
- 内部函数调用外部作用域的变量,则这个函数就是闭包
- def make_power(x):
def fn(arg):
return arg **x
return fn
f2 = make_power(2)
调用:f2(100) #10000
装饰器 decorator
- 一个函数包装另一个函数或类
- 不改变函数名的情况下,改变被包装函数(对象)的行为
- @修饰函数名
- 无参数:@修饰函数名
- 被修饰函数有参数:*args, **args的使用
- 修饰函数有参数:@deco(“argslist”)
函数的属性
- 函数式一个类 ,所有函数都有自己的属性
- name,函数名
- doc,函数内部的第一行注释
模块 module
- 别人写好,供别人使用
- 分类,内置模块,标准库,第三方模块,自己编写的模块
- 模块的导入,import statement
- import math as ma; import sys, os
- 查看模块内容,help(obj)模块的属性及内容,dir(obj)模块的属性字符串输出
- 模块的查找顺行,1,搜索内置模块,sys.builtin_module_names,2,sys.path提供的命令。3,搜索程序运行时的路径(当前路径)
- 模块的属性
__name__属性:
__doc__属性:
__all__属性:
__file__属性: - 模块的隐藏属性:模块中以"_“或”“开头,不以”"结尾的属性,from import *不能导入到其他模块。
包 package
- 模块的分组管理的方法
- 相近功能的模块进行封装管理
- from 包名.子包名.模块名 import *** as **
- 包的加载路径与模块的加载类似
面向对象编程
- 思想:一切皆对象
- 两个概念:对象,类
- 类的创建语法:class 类名(继承列表):
- 内部包含的内容为:类文档字符串,实例方法定义,类变量定义,类方法定义,静态方法定义
- class定义得到的类也是对象,是原类的对象
- init(self,参数list),通过self.age,self.name定义实例成员
- 实例方法:
def get_color(self):
\t return self.color - 实例方法的调用:dog1.get_color()或者Dog.get_color(dog1)
- 构造方法:def init(self[,形式参数列表]),初始化实例变量
- 析构方法:del(self): pass,销毁对象时被自动调用,一般不使用,由垃圾回收机制回收对象
- 内置实例属性:__dict__属性,属性的字典输出;__class__属性,得到类;__doc__属性,得到注释;__main__属性,模块的名称
- 类变量,属于类,不属于对象(实例);类直接调用;类实例直接访问;类实例通过__class__属性间接访问
- 类变量的书写:不通过self定义,直接写到类当中。
- 类方法:@classmethod(装饰器的语法)
- 类方法与实例方法之间的区别:类方法可以访问类变量,不可访问实例变量;实例方法可以访问类变量,也可访问实例变量;类方法可以用实例来调用,也可以用类调用,实例方法在调用时必须传入实例
- 静态方法:@staticmethod
- 类实例和对象实例都可以调用调用静态方法
- 静态方法不能访问类变量和实例变量
- 实例方法,类方法,静态方法总结:1,不想访问类变量和实例变量,用静态方法,2,指向访问类内变量,不想访问实例属性用类方法,3,既想访问类内变量,也想访问实例变量用实例方法。
- 特性属性:@property用来模拟一个属性,类似与getter与setter功能;有点像运算符重载的感觉
- 类的__slots__属性,限定一个类创建的实例只能有这些实例属性。
- 对象的属性管理:getattr(obj,name);hasattr(obj,name);setattr(obj,name,value);delattr(obj,name)
- 用于类的函数:isinstance(obj,类型),判断类是否为某个类型;id(obj),返回对象的标识
异常
- try:
\t statement
except:
\t errordeal statement1 as 变量1
except:
\t errordeal statement2
…
except:
\t errordeal statement others
else:
\t未发生异常statement
finally:
\t最终语句
函数的重载
- 运算符重载