一、函数式编程
1、返回函数
函数的返回值可以是一个函数。在返回函数时,函数没有执行,返回函数不能引用任何可变的变量
def delay_sum(*arg):
ax = 0
def sum():
for n in arg:
ax += n
return ax
return sum
2、匿名函数
lambda x : x *x 等效于
def f(x):
return x*x
3、装饰器decorator
在函数运行期间动态增加函数的功能,原函数不改变定义。
def log(func):#装饰器
def wrapper(*args,**kw):
print('This is wrapper')
return wrapper
@log
def now():
print('2019-3-30')
4、偏函数
利用functools.partial(func,**kw),把函数func的某些参数给固定,返回一个新的函数。
如定义一个新的函数,实现计算出二进制字符串所对应的十进制数:
import functools
int2 = functools.partial(int,base = 2)
int2('100') #4
那么这个可以用到自定义的函数吗? Y
二、模块
一个.py文件就是一个模块
1、基本知识
将模块放入包中,每一个包有一个__init__.py(注意是2个下划线),而且该模块是必须存在的,标识着该目录是一个包而不是普通目录。
检查一个模块是否存在 import abc 若未出错,则表示存在
_xxxx 表示该变量为私有的 如_abs,_a 不应该被直接访问,一般的变量是公开的
2、安装模块 pip install xxx
三、面向对象 OPP
三大特点:数据封装、继承和多态
1、结构及其调用
class Student(object): #object 为固定的,表示一个原生的类
def __init__(self,name,score):# self参数为必须的参数,调用时不需要给self传参
self.name = name
self.score = socre
def print_score(self):
print(self.score)
调用:
from student import Student #上面的类存在student.py中
jamson = Student('Jamson',99)
jamson.print_score()
2、限制访问
对对象的属性值进行限制,禁止外部访问修改,在变量名前加上2个下划线
class Student(object): #object 为固定的
def __init__(self,name,score):# self参数为必须的参数,调用时不需要给self传参
self.__name = name
self.__score = socre
3、继承和多态
def Animal(object):
def run(self):
print('Animal is runing...')
def Dog(Animal):#表示继承Animal
pass
dog = Dog()
dog.run()
4、获取对象信息
获取类型:type()
type(123) == int #True
利用isinstance(dog,Dog)
getattr(obj,'x',404) #得到属性x的值,则返回404
hasattr(obj,'insert') #查询obj对象是否有insert方法或者属性
setattr(obj,'y') # 给对象新增y属性
del obj.y # 删除对象的y属性