python基础---文件的读写操作及装饰器和闭包

#用函数在字典里添加元素。
a={
‘001’:{‘name’:‘张三’,‘age’:‘18’,‘adress’:‘北京’},
‘002’:{‘name’:‘张二’,‘age’:‘28’,‘adress’:‘上海’},
‘003’:{‘name’:‘张大’,‘age’:‘38’,‘adress’:‘北京’},
‘004’:{‘name’:‘张四’,‘age’:‘28’,‘adress’:‘上海’},
‘005’:{‘name’:‘张六’,‘age’:‘38’,‘adress’:‘北京’}
}
def modify():
number=input(“请输入学号:”)
if number in a.keys():
print(‘学号重复’)
else:
zd={}
zd[‘name’]=input(“请输入姓名:”)
zd[‘age’]=input(“请输入年龄:”)
zd[‘address’]=input(“请输入地址:”)
a[number]=zd
modify()
print(a)
for k in a.keys():
print(k,a[k])

#写操作。
f=open(‘E:\a.txt’,‘w’)#打开一个文件以只写的方式,叫a.txt,路径在E盘下
#f.write(“非的次个非想”)
f.close()
f=open(‘a.txt’,‘w’)#直接把a.txt保存在work.py中。
f.write(‘12345’)
f.close()

#读操作。
f=open(‘a.txt’,‘r’)#想输出中文最好将文件保存在路径中。或者r后面加encoding=‘utf-8’
content=f.read(4)#加数字表示只读n个字符。不加数字时全读。
#content1=f.readline()#以行为单位读取。只读一行
print(content)
#print(content1)
f.close()

f=open(‘a.txt’,‘r’)
content=f.readlines()#以列表形式输出所有行
print(content)
f.close()

f=open(‘a.txt’,‘w’,encoding=‘utf-8’)
f.write(‘北京’)
f.write(’\n’)
f.write(‘南京’)
f.close()

f=open(‘a.txt’,‘a’,encoding=‘utf-8’)#表示在已有的内容后面追加
f.write(“成都”)
f.close()

f=open(‘a.txt’,‘r’)
print(f.tell())#没读的时候光标在字符前,所以位置是0.
x=f.read(4)#读取4个字符
print(x)
print(f.tell())#此时位置在4的后面
f.close()

f=open(‘a.txt’,‘r’)
f.seek(2,0)#第一个参数代表偏移的字符数,第二个参数是从哪个地方开始偏移。0,开头,1,中间,2,末尾。
x=f.read(4)
print(x)
f.close()

import os
os.rename(‘a.txt’,‘c.txt’)#将a重命名。

#删除文件:os.remove(文件地址)
#os.mkdir(‘daf’,0x777)创建一个名为daf的文件,权限:第一个7为自身权限,第二个7为同组权限。
#p=os.getcwd() print§得到当前的工作目录。
#os.remir(文件夹名称):删除当前文件夹
#b=os.path.exists(文件名称):判断文件是否存在,返回布尔值。

import os
os.makedirs(‘a\b\c’)#创建多层文件夹。
#深拷贝与浅拷贝区别:
import copy
a=3
b=3
print(id(a)==id(b))

a=3
b=a
print(id(a)==id(b))

a=[1,2,3]
b=[1,2,3]
print(id(a))#id不同。
print(id(b))

c=a
print(id(a)==id©)
c.append(4)#a,c指向同一地址,改变a就是改变c。
print(a)

a=3
b=a
a=4
print(a,b)#返回a=4,b=3

a=3
b=copy.copy(a)
c=copy.deepcopy(a)
print(id(a)==id(b)==id©)#三个地址相同:不可变型的copy不改变地址。

import copy
a=[1,2,3]
b=a
c=copy.copy(a)
d=copy.deepcopy(a)
print(id(a)==id(b))
print(id(a)==id©)#可变类型的拷贝指向不同的地址。
print(id(a)==id(d))

a=[1,2,3,[10,20,30]]
b=copy.copy(a)
c=copy.deepcopy(a)
a.append(0)#改变第一层内容不影响,因为拷贝的内容已与其无关
print(b)
print©
print(id(a[3]))
print(id(b[3]))
a[3][2]=9#浅拷贝只拷贝一层内容,【10,20,30】的地址还是指向同一地址,改变时必会同时改变。
print(b)
print©
#迭代器。
import copy
a=(1,2,3)
b=iter(a)#迭代器。for 中自带迭代。
print(type(b))
print(next(b))
print(next(b))
print(next(b))
#生成器。
def func(n):
i=0
while i<n:
yield i#遇见yield,在运行的时候:next(a)直接跳到此步骤运行。可以节省内存空间,一次只产生一个数并且保存上一个数。
i+=1
a=func(1000)
print(next(a))
print(next(a))
print(next(a))

#使用生成器做斐波那契数列。
def fib(n):
a,b=0,1
i=0
while i<n:
a, b = b, a + b
yield a
i+=1
f=fib(9)
for x in f:
print(x)

def a(b):
b()
def x():
print(“123”)
a(x)#将函数名x传给参数b,则b()就相当于x(),相当于调用函数x。
#装饰器。
import time
def hx(f):#装饰器函数,f接受被装饰的函数名
def neibu():#装饰内部函数
start=time.time()
f()#调用被装饰函数
end=time.time()
print(end-start)
return neibu#装饰器返回内部函数(内部代表包装盒)。
@hx#@加函数名代表下面的函数被装饰。相当于hx(js())
def js():
print(“12345”)
js()

def decor(func):
def neibu(x):
print(“")
func(x)
print("
”)
return neibu
def decor2(func):
def neibu(x):
print("####")
func(x)
print("####")
return neibu
@decor2#decor2又把decor套了一层。双层装饰器。
@decor
def fun(name):#整个函数是第一层函数的参数。
print(name,“1243”)
fun(“qwe”)
‘’’
#闭包。 (装饰器就是一种闭包)闭包三要素:
def fun1(b):#1.包含内部函数的函数。
a=3
def fun2©:
d=a*b+c#3.内部函数使用了外部函数的变量。
return d
return fun2#2.返回内部函数名。
x=fun1(4)
print(x(5))
print(x(6))

猜你喜欢

转载自blog.csdn.net/zyf0111/article/details/88542308