python笔记整理day3

装饰器:遵循开放封闭原则,在不改变原函数的情况下,扩展了函数的的功能

函数名仅仅是个变量,只不过指向定义的函数而已,所以才能通过函数名()调用,如果函数名=xxx
被修改了,那么当在执行函数名()时,调用的就不指向之前的那个函数了
def decorater(fun):
    def wrapper():
        fun()
        print('刷漆')
    return wrapper
@decorater
def house():
    # house=decorater(house)
    print('毛坯房')

house()
装饰器的功能:
1、引入日志  2、函数执行时间统计  3、执行函数前预备处理  4、执行函数后清理功能  5、权限校验等场景  6、缓存
'''
装饰器定义:
def aaa(func):
   def bbb(参数...):
      func()
      ...
    return bbb
装饰:
@装饰器名   原函数=装饰器(原函数)
def 原函数():
   pass
带参数的装饰器
def decorater(func):
    def wrapper(*args,**kwargs):
        func(*args,**kwargs)
        print('刷漆')
        print('铺地板')
    return wrapper
@decorater
def house(name,address,area=40):
    print('{}房子位于{},共计{}平米'.format(name,address,area))
house('平安喜乐','刘屯')
装饰器修饰有返回值的参数
原函数有返回值,装饰器内部也要有返回值
def decorater(func):
    def wrapper(*args,**kwargs):
        r=func(*args,**kwargs)
        print('预计装修费用{}'.format(r))
        print('刷漆')
        print('铺地板')
        return r
    return wrapper

@decorater
def house():
    print('我是一个毛坯房')
    return 300
r=house()
print(r)
print('*'*20)
def outer_check(time):
    print('-------')
    def check_time(action):
        def do_action():
            if time<22:
                return action
            else:
               print('999')
        return do_action
    return  check_time
@outer_check(23)
def play_game():
    print('0000')
print(play_game())
递归函数:如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数
遵循:1、递归需要有出口
     2、每次递归向出口靠近
练习:使用递归实现斐波那契数列:1,1,2,3,5,8,13,21,34


匿名函数:使用lambda关键词能创建小型函数,这个函数称为匿名函数,这种函数省略了def的声明
匿名函数的定义格式:  lambda 参数列表:返回值运算表达式
lambda函数能接收任何数量的参数但只能返回一个表达式的值
r=lambda a:a+1
r(2)
print(r(2))
匿名函数的应用场景:
1、匿名函数作为参数使用
def func1(a,f):
    print('---a')
    r=f(a)
    print(r)
    print('----b')
func1(2,lambda x:x+1)
'''
在python中,函数其实也是一种数据类型,函数对应的数据类型是function,可以把它当作是一种
复杂的数据类型,既然同样都是一种数据类型,我们就可以把它当作数字或者字符串进行处理
高阶函数:一个函数的参数是另一个函数
系统高阶函数:max  min  sorted
'''
list1=[('tom',19),('jerry',20),('rose',12),('cat',23)]
m=max(list1,key=lambda x:x[1])
print(m)
n=min(list1,key=lambda x:x[1])
print(n)
s=sorted(list1,key=lambda x:x[1],reverse=True)
print(s)
# filter的匿名函数要求返回值必须是bool类型,只有bool类型结果为True的才是符合过滤条件的
rr=filter(lambda x:x[1]>=20,list1)
print(list(rr))
# map:用来提取  通过匿名函数指明提取内容,并对内容进行加工处理

ma=map(lambda x:x[0].upper,list1)
print(list(ma))
print('*'*20)

from functools import reduce
# 压缩
r=reduce(lambda x, y: x + y, [1, 2, 3, 4, 5])
print(r)

文件操作:文件上传(日志、图片)
mode:r w rb wb
r、w分别表示读写  只能读写纯文本文件
rb、wb可以读写二进制文件  (视频、图片)
open(file,mode,buffering,encoding)
读文件:
open(path/filename,'rt)返回值:stream(管道)
container=stream.read()  读取管道中内容
注意:如果传递的path/filename有误 则会报错  FileNotFoundError
     如果是图片则不能使用默认的读取方式,默认读取方式rt  mode='rb'
总结:
read()   读取所有内容
readable()  判断文件是否可读
readline()  每次读取一行内容
readlines() 读取所有行保存到列表中
写文件:
stream=open(path/filename,'w')  mode='w'表示写模式
方法:mode='w'
   write(内容):每次都会将原来的内容清空,然后写当前的内容
   writelines(iterable):没有换行的效果,可以手动添加
   fp=open(r'F:\aa.txt','w')
   fp.write('To LuYi:\n')
   s='You are the best!'
   fp.write(s)
   fp.writelines(['You will be sucessful,','you should be confident!\n','fighting'])
   fp.close()
如果mode='a':
    不会将原来文件内容清空,会在文件的结尾处重新追加内容
文件的复制:
    建立两个文件流  一个用来进行读文件  一个用来进行写文件
    with结合open使用,可以帮助我们自动释放资源
# with open('./qq.jpg','rb') as fp:
#     container = fp.read()
# with open(r'F:\p\gi.jpg','wb') as fp1:
#     fp1.write(container)
# print('over')


模块——os模块  系统模块
1、os.path()
2、os.path.dicname(__file__):找到当前文件所在文件夹的路径  绝对地址
3、os.path.join(path,'path2'):将path和path2连接  形成新的地址
import os
with open('./qq.jpg','rb') as fp:
    container = fp.read()
    print(fp.name)
    qie=fp.name
    filename=qie[qie.rfind('\\')+1:]
    # 截取文件名
    path=os.path.dirname(__file__)
    path1=os.path.join(path,filename)
    with open(path1,'wb')as fp1:
        fp1.write(container)
print('-------over')
4、os.path.isabs()判断路径是否是绝对路径  返回bool值
import os
r=os.path.isabs(r'F:\p\gir.jpg')
print(r)
相对路径:
同级别的文件路径查找:直接查找
不同级别的文件路径查找:比自己级别高 ../  先返回上一级在查找
                   比自己级别低  / 找下一级
r=os.path.isabs('../images/girl_jpg')
r=os.path.isabs('images/girl.jpg'
5、os.path.abspath()  通过相对路径获得绝对路径
   os.path.abspath(__file__)获取当前文件的绝对路径
   os.getcwd() 获取当前文件所在文件夹路径
   os.isfile()
   os.isdic()
   os.split()
   os.splitext()
   os.getsize()
import os
# r=os.path.isabs(r'F:\p\gir.jpg')
# print(r)
# ro=os.path.abspath('./qq.jpg')
# print(ro)
ro=os.path.abspath(__file__)
print(ro)
print('*'*20)
path=r'C:\Users\Administrator\PycharmProjects\pythonProject1\python 419\qq.jpg'
result=os.path.split(path)
# 分割文件所在位置与祖先路径

print(result[1])
print(result)
print('---------------')
path2=r'C:\Users\Administrator\PycharmProjects\pythonProject1\python 419\day1.py'
result1=os.path.splitext(path2)
ss=os.getcwd()
print(ss)
print('$$$$$')
# 分割文件与扩展名
print(result1[1])
print(result1)
size=os.path.getsize(path2)
print(size)
# 获取文件的大小,单位是字节
joi=os.path.join(path2,'file','aa.jpg')
print(joi)

'''
os的函数
os.listdir()返回指定目录下的所有的文件和文件夹,保存到列表中
os.mkdir()  创建指定路径下的文件
os.rmdir()  删除指定路径下的空文件
      os.rmdir(r'F:\r')
      print('delete')
os.removedirs()
os.remove() 删除一个文件
os.path.exit()
os.chdir()切换目录
os.getcwd()获取当前文件目录
'''
import os
path=r'F:\q\qqqq'
name_list=os.listdir(path)
print(name_list)
for list in name_list:
    os.remove(os.path.join(path,list))
    print('移除成功')
else:
    os.rmdir(path)
    print('over')


复制文件:
import os

src_path='F:\q'
target_path='F:\p'
src_name_list=os.listdir(src_path)
print(src_name_list)
for src_name in src_name_list:
    pp=os.path.join(src_path,src_name)

    with open(pp,'r') as fp:
        container=fp.read()
        new_src_name=os.path.split(pp)
        print(new_src_name[1])
        qq = os.path.join(target_path, src_name)
        with open(qq,'w')as fp1:
            fp1.write(container)
else:
    print('over')



复制文件和文件夹
import os

src_path='F:\p'
target_path='F:\q'
def copy(src_path,target_path):
    src_path_list=os.listdir(src_path)
    for src_name in src_path_list:
        path=os.path.join(src_path,src_name)
        print(path)
        if os.path.isdir(path):
            new_path=os.path.join(target_path,src_name)
            os.mkdir(new_path)
            copy(path,new_path)
        else:
            with open(path, 'rb') as fp:
                container = fp.read()
                new_src_name = os.path.split(path)
                print(new_src_name[1])
                qq = os.path.join(target_path, src_name)
                with open(qq, 'wb') as fp1:
                    fp1.write(container)
    else:
        print('end-----')
copy(src_path,target_path)


文件总结:
文件操作:
   open()
   mode
   path  绝对路径  相对路径(相对当前路径)
   stream=open(file,mode)
   stream.read()
   stream.write()
   stream.close()
   with open(path,mode) as stream:
os模块:
os.path常用函数
os常用函数:











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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值