Python基础-文件读写/拷贝/迭代/生成器/装饰器/闭包

文件的读写:

f=open('E:\\a.txt','w')  #w代表只写的方式,打开一个文件,叫a.txt,路径是E盘下
f.write('北京我爱你')
f.close()
f=open('a.txt','w')      #相对路径


f=open('a.txt','r')
content=f.read(3)
print(content)
f.close()


f=open('a.txt','r',encoding='utf-8')
content=f.readline()          #读一行
print(content)
content=f.readline()
print(content)
content=f.readline()
print(content)
f.close()


f=open('a.txt','r',encoding='utf-8')
content=f.readlines()          #读出所有的行,放到列表里
print(content)
f.close()


f=open('a.txt','w')
f.write('北京')
f.write('\n')
f.write('南京')
f.close()


f=open('a.txt','a')             #a,是追加
f.write('北京123')
f.close()


f=open('a.txt','r')
print(f.tell())
print('---------')
x=f.read(4)
print(x)
print('-----------')
print(f.tell())          #字节数,光标
print(x)


f=open('a.txt','r')
x=f.read(4)
print(x)
f.seek(0,0)#第一个参数代表的是偏移的字节数,第二个参数从哪个地方偏移,0代表文件头,1代表当前,2代表末尾
x=f.read(4)
print(x)
f.close()


import os    #os为操作系统
os.rename('a.txt','c.txt')    #重命名


import os
os.remove('a.txt')  #删除文件


import os
os.mkdir('abc',0x777)        #创建名字为‘abc’的目录,允许所有人读写操作


import os
p=os.getcwd()      #获取当前所在目录
print(p)


import os
os.rmdir('abc')            #删除目录


import os
b=os.path.exists('c.txt')             #查询文件是否存在
print(b)
b=os.path.exists('abc')
print(b)
b=os.path.exists('C:\\Users\\Administrator\\python作业')
print(b)


import os
os.makedirs('a//b//c')

拷贝

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

c=3
d=c
print(id(c)==id(d))


import copy
a=[1,2,3]
b=[1,2,3]
print(a==b)                   #相同
print(id(a))
print(id(b))
c=a
print(id(a)==id(c))            #地址相同
a.append(4)
print(c)

a=3
b=a
a=4
print(b)

import copy
a=3
b=copy.copy(a)
c=copy.deepcopy(a)
print(a,b,c)
print(id(a)==id(b)==id(c))

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(c))
print(id(a)==id(d))
print(id(a))
print(id(c))
print(id(d))

copy.copy() #拷贝外层,内层还是用地址
copy.deepcopy() #从里到外彻彻底底的拷贝,不管多少层,全部拷贝

import copy
a=[1,2,3,[4,5,6]]
b=a
c=copy.copy(a) #当浅copy的时候,第一层是新的,第二层用的还是原来的地址
d=copy.deepcopy(a)  #当用深copy的时候,所有的内容都是新的,所以不会影响地址

print(id(a)==id(b))
print(id(a)==id(c))
print(id(a)==id(d))

a.append(9)
print(c)
print(d)
a[3].append(99)

print(c)
print(d)

迭代

a=[1,2,3]           #列表,元组,字符串,集合,都能迭代
b=iter(a)           #迭代器,一次输出一个
print(next(b))
print(next(b))
print(next(b))
print(type(b))

生成器

def hanshu(n):
    i=0
    while i<n:
        yield i
        i+=1
a=hanshu(1000)
print(next(a))
print(next(a))
print(next(a))
print(next(a))
print(next(a))

def fbnq(n):
    a,b=0,1
    i=0
    while i<n:
        a,b=b,a+b
        yield a             #返回a的值
        i+=1
f=fbnq(10)
for x in f:
    print(x)

def a(b):
    b()
def x():
    print('123')
a(x)

装饰器

import time
def hx(f):  #装饰器的函数,f接受被装饰的函数名
    def neibu(): #装饰内部函数
        start=time.time()
        f()         #调用被装饰的函数
        end=time.time()
        print(end-start)
    return neibu()    #装饰器返回内部函数。(内部代表的是包装盒)
@hx #@加函数名,代表下面的函数被hx装饰
def jisuan():
    print('123456')
jisuan

import time
def decor(func):
    def nb(cs):
        print('***************')
        func(cs)
        print('***************')
    return nb
@decor
def ych(name):
    print(name,'开演唱会')
ych('刘德华')

import time
def decor(func):
    def nb(cs):
        print('***************')
        func(cs)
        print('***************')
    return nb
def dd(func):
    def nb(cs):
        print('###############')
        func(cs)
        print('###############')
    return nb
@dd
@decor
def ych(name):
    print(name,'开演唱会')
ych('刘德华')


装饰器形成了闭包


def hanshu(b): # 1,外部函数包含内部函数的函数
    a=3
    def nb(c):  #闭包
        d=a*b+c    #3,内部函数使用了外部函数的变量
        return d
    return nb    #2,外部函数返回内部函数名
x=hanshu(4)
print(x(5))
print(x(6))

猜你喜欢

转载自blog.csdn.net/Liang_Ren_/article/details/87943353