开放封闭原则 装饰器

对于函数内部是封闭的

@outer

1.执行outer函数,并且将其下面的函数名当作参数

2.将outer的返回值重新赋值给f1(相当于再定义一个f1,让f1=outer的返回值)

新f1函数=inner

原函数封装到其它函数里边

执行新的函数

只要函数应用装饰器,那么函数就被重新定义,重新定义为:装饰器的内层函数

image

回顾

1.lambda

func = lambda x,y:9+x

参数:x,y

函数体:9+x==>>return 9+x

func:函数名

def func(x,y):

return x+9

def f1():

return “F1”

def f2(x):

x()#执行了函数

f1=>函数

f2=>函数

f1()=>执行函数

f2(f1)执行f2,把f1当成参数传递

扩展:函数名可以当做参数传递

            函数名()=>执行函数

            函数名==》代指函数

def MyFilter(func,arg):
for i in arg:
func(i)
def MyPrint(x):
print(x)
MyFilter(MyPrint,[11,22,33,44,55,6,6])

Connected to pydev debugger (build 172.3317.103)
11
22
33
44
55
6
6

Process finished with exit code 0

open()

一、打开文件

二、操作文件

三、关闭文件

基本的打开方式

open(文件名,模式,编码)默认是只读模式就是”r”

f = open("ha.log")#equals open("ha.log","r")
data=f.read()
f.close()
print(data)

r,只读模式【默认】
w,只写模式【不可读;不存在则创建;存在则清空内容】
x,只写模式【不可读,不存在则创建;存在则报错】
a,追加模式【不可读,不存在则创建,存在则只追加内容】

”+”表示可以同时读写文件
r+,读写【可读、可写】 从开始向后读 写追加,指针调到最后
w+,写读【可读,可写】 先清空,从开始向后读,写也是追加数据,每次都是重新写 f.write(“中”)
x+,写读【可读,可写】 文件存在则报错
a+,写读【可读,可写】 找开后就在最后

都可以通过seek调整

#python3中的
”b”表示以字节的方式操作
rb或r+b
wb或w+b
xb或x+b
ab或a+b
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型


flush()刷到硬盘里

f.read(1)读取一个字符
f.read(1)带b读取一个字节

map

map(函数,可以迭代的对象)

# def f1(x):
# if x>2:
# return True
# else:
# return False
# ret = filter(f1,[0,1,2,3,4,5])
# for i in ret:
# print(i)

def f1(x):
return x+100
#ret = map(f1,[1,2,3,4,5])
ret = map(lambda x:x+100,[1,2,3,4,5,6,])
print(ret)
for i in ret:
print(i)










C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\python.exe “C:\Program Files\JetBrains\PyCharm 2017.2\helpers\pydev\pydevd.py” –multiproc –qt-support=auto –client 127.0.0.1 –port 1064 –file C:/Users/Administrator/PycharmProjects/py/recover.py
pydev debugger: process 4952 is connecting


Connected to pydev debugger (build 172.3317.103)
<map object at 0x02E71030>
101
102
103
104
105
106


Process finished with exit code 0