Python基础:文件、拷贝、迭代器、生成器、函数封装、装饰器、闭包

#文件
f=open("E:\\a.txt","w")#在E盘下以只写的方式打开a.txt文件,绝对位置
f.write("北京我爱你")#将引号里的内容写入a.txt
f.close()#关闭a.txt

 

 

 

f=open("b.txt","w")#相对位置

f.write("234432")

f.close()

 

 

 

 

f=open("E:\\a.txt","r")#"r"只读

content=f.read()

print(content)

f.close()

 

 

 

 

f=open("b.txt","r")

content=f.read(3)#只读3个,括号里不填就是全读

print(content)

f.close()

 

 

 

 

f=open("b.txt","r",encoding="utf-8")

content=f.readline()#一次readline是输出一行

print(content)

content=f.readline()#在此readline是输出下一行

print(content)

content=f.readline(2)#括号里输入数字就是输出这行中的几个字符

print(content)

f.close

 

 

 

 

f=open("b.txt","r",encoding="utf-8")

content=f.readline()

print(content)

content=f.readlines()#readlines是以行为元素输出剩下的所有行中的字符

print(content,type(content))

f.close()

 

 

 

 

#read():括号里不填就是全读,填多少就输出前几个字符

#radeline():括号里不填就是全读一行,填多少就输出这行的前几个字符

#readlines():将剩下的所有行以列表的形式输出

 

 

 

 

f=open("E:\\a.txt","w+")

f.write("北京")#不加\n则保存在同一行

f.write("南京\n")

f.write("上海")

f.close()

f=open("E:\\a.txt","a+")

f.write("123你好123")

f.close()

#"w"会覆盖原内容,“a”是在原内容后面追加内容,不会覆盖

 

 

 

 

 

 

 

 

# r只读,r+读写,不创建

# w新建只写,w+新建读写,二者都会将文件内容清零(新文件覆盖旧文件)

# a:附加写方式打开,不可读;a+: 附加读写方式打开

 

 

 

 

f=open("b.txt","r")

print(f.tell())#开始读之前游标指在0的位置

x=f.read(3)

print(x)

print(f.tell())#读3个数后游标指在3的位置

f.close

 

 

 

 

f=open("b.txt","r")

x=f.read(4)

print(x)

f.seek(3,0)#第一个参数代表偏移的字符数。第二个参数代表从哪个地方偏移,0代表开头,1代表当前位置,2代表末尾

x=f.read(5)

print(x)

f.seek(0,1)

x=f.read(2)

print(x)

f.close()

 

 

 

 

import os

os.rename("b.txt","c.txt")#重命名

# os.rename("c.txt","b.txt")

os.remove("b.txt")

os.mkdir("abc",0x777)#r=4,w=2,x=1(执行),第一个7是自己,第二个是7是组,第三个是其他人

os.rmdir("abc")#删除

p=os.getcwd()#获取当前的工作目录(get current work directory)

print(p)

b=os.path.exists("E:\\a.txt")#判断文件或目录是否存在

print(b)

b=os.path.exists("day2.py")

print(b)

os.makedirs("a//b//c")

os.makedirs("d\\e\\f")

 

 

 

 

 

import copy

a=3

b=3

c=3

d=c

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

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

print(id(a)==id(c))

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

 

 

 

 

 

a=[1,2,3]

b=[1,2,3]#复杂的类型在声明时会获得一个新的空间。常量拥有固定的空间,是确定的一个区域

c=a

print(id(a))

print(id(b))

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

print(id(c))

print(id(a)==id(c))

a.append(4)

print(id(a)==id(c))#a和c指向同一个空间,所以a修改后c也被修改

 

 

 

 

 

a=3

b=a#此时b指向的是3的位置

a=4#a指向的位置变成4,但是b指向的位置还是3

print(b)

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

 

 

 

 

import copy

a=3

b=copy.copy(a)

c=copy.deepcopy(a)

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(b))

print(id(c))

print(id(d))
#copy给的是值,copy常量时地址不发生改变,copy复杂的数据类型时地址会发生变化

 

 

 

 

import copy

a=[1,2,3,[4,5,6]]

b=a

c=copy.copy(a)

d=copy.deepcopy(a)

print(a,b,c,d)

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

a.append(7)

print(a,b,c,d)

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

a[3].append(99)

print(a,b,c,d)

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

print(id(a[3]),id(c[3]),id(d[3]))

 

 

 

# deepcopy是完全的拷贝,内层外层都拷贝,copy只拷贝外层,内层只拷贝一个地址

 

 

 

#迭代器

a=(1,2,3)

b=iter(a)#iter:依次访问a里面的每一个元素

print(type(b))#iterator:迭代器

print(next(b))

print(next(b))

print(next(b))

 

 

 

 

# 生成器

def shengcheng(n):

    i=0

    while i<n:

        yield i#yield:暂时停止函数的执行并交出i的值

        i+=1

a=shengcheng(1000)

print(next(a))

print(next(a))

print(next(a))

print(next(a))

 

 

 

 

#用生成器做斐波那契数列

def fbnq(n):

    a=0

    b=1

    i=0

    while i<n:

        a,b=b,a+b

        yield a

        i+=1

a=fbnq(12)

for x in a:

    print(x)

 

 

 

 

# 函数的封装

def a(b):

    b()

def x():

    print("12345")

a(x)

 

 

 

 

#装饰器

import time

def hanshu(f):#装饰器的函数,f接受被装饰的函数名

    def neibu():#装饰内部函数

        start=time.time()

        f()#调用被装饰的函数

        end=time.time()

        print(end-start)

    return neibu#装饰器返回内部函数,(内部代表的是包装盒)

@hanshu#@加函数名,代表下面的函数被这个函数装饰

def jisuan():

    print("12345")

jisuan()

 

 

 

 

def zs(fun):

    def neibu(cs):

        print("****************")

        fun(cs)

        print("****************")

    return neibu

@zs

def ych(name):

    print(name,"开演唱会")

ych("刘德华")

 

 

 

 

def zs(fun):

    def neibu(cs):

        print("************")

        fun(cs)

        print("************")

    return neibu

def zsq(fun):

    def neibu(cs):

        print("############")

        fun(cs)

        print("############")

    return neibu

@zsq

@zs

def ych(name):

    print(name,"开演唱会")

ych("刘德华")

 

 

 

 

#闭包:闭包的三大要素:

def bb(b):#1.包含内部函数的函数

    a=3

    def neibu(c):

        d=a*b+c#3.内部函数使用了外部函数的变量

        return d

    return neibu#2.返回内部函数的函数名

x=bb(4)

print(x(5))

print(x(6))

#所以装饰器也形成闭包

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值