python学习day14 装饰器(二)&模块

本文深入探讨了Python中的装饰器概念,包括普通装饰器和带参数装饰器的基本格式及使用场景,同时介绍了常见模块如hashlib、random、getpass、time的使用方法,以及os、sys、shutil等模块的功能和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

装饰器(二)&模块

#普通装饰器基本格式
def wrapper(func):
    def inner():
        pass
        return func()
    return inner

def func():
    pass
func = wrapper(func)
func()
#带参数装饰器基本格式
def w(counter):
    def wrapper(func):
        def inner(*args,**keargs):
            lis = []
            for i in range(0,counter):
                a=func(*args,**keargs)
                lis.append(a)
            return lis
        return inner
    return wrapper

def func(*args,**keargs):
    return 8

0.装饰器补充

  • 常见的模块(hashlib,random,getpass,time)

  • 默认值参数尽量是不可变数据类型!可变数据类型有坑!面试题

    def func(a,b=[]):
        b.append(a)
        return b
    
    l1 = func(1)
    l2 = func(2,[11,22])
    l3 = func(3)
    
    # [1,3]   [11,22,2]   [1,3]
    print(l1,l2,l3)                                   #最后输出的时候l1与l3均已运行,b=[1,3]
    def func(a,b=[]):
        b.append(a)
        print(b)                                      #函数执行一次输出一次
    
    func(1)
    func(2,[11,22,33])
    func(3)
    
    # [1]  [11,22,33,2]   [1,3]
  • 递归

    • 函数自己调用自己.效率低
  • 装饰器:

#普通装饰器基本格式
def x(func):
    def inner():
        return func()
    return inner 

@x
def index():
    pass
#带参数的装饰器基本格式
def x(counter):
    def wrapper(func):
        def inner(*args,**kwargs):
            data = func(*args,**kwargs) # 执行原函数并获取返回值
            return data
        return inner 
    return wrapper 

@x(counter)
def index():
    pass
#面试题
# 写一个带参数的装饰器,实现:参数是多少,被装饰的函数就要执行多少次,并返回最后一次执行的结果【面试题】
def xxx(counter):
    print('x函数')
    def wrapper(func):
        print('wrapper函数')
        def inner(*args,**kwargs):
            for i in range(counter):
                data = func(*args,**kwargs) # 执行原函数并获取返回值
            return data
        return inner
    return wrapper

@xxx(5)
def index():
    return 8

v = index()
print(v)

1.带参数的装饰器

  • flask框架中存在很多带参数的装饰器;面试题

2.模块

  • \n 换行符

  • \t 制表符table

  • \r 回到当前的起始位置,再次打印时删除本行内容

    print('回到起始位置\r',end='')
    print('清空原有内容',end='')
  • r 释义,当文件路径中存在\n或者\t等字符时,当做普通字符处理

    v1 = r"D:\code\s21day14\n1.mp4"  (推荐)
    print(v1)

1.os模块

和操作系统相关的数据。

  • os.path.exists(path) , 如果path存在,返回True;如果path不存在,返回False

  • os.stat('20190409_192149.mp4').st_size , 获取文件大小

  • os.path.abspath() , 获取一个文件的绝对路径

    path = '20190409_192149.mp4' # D:\code\s21day14\20190409_192149.mp4
    
    import os
    v1 = os.path.abspath(path)
    print(v1)
  • os.path.dirname ,获取路径的上级目录

    import os
    v = r"D:\code\s21day14\20190409_192149.mp4"
    
    print(os.path.dirname(v))
    
  • os.path.join ,路径的拼接

    import os
    path = "D:\code\s21day14" # user/index/inx/fasd/
    v = 'n.txt'
    
    result = os.path.join(path,v)
    print(result)
    result = os.path.join(path,'n1','n2','n3')
    print(result)
    
  • os.listdir , 查看一个目录下所有的文件【第一层】

    import os
    
    result = os.listdir(r'D:\code\s21day14')
    for path in result:
        print(path)
    
  • os.walk , 查看一个目录下所有的文件【所有层】

    import os
    result = os.walk(r'D:\code\s21day14')
    for a,b,c in result:
        # a,正在查看的目录 b,此目录下的文件夹  c,此目录下的文件
        for item in c:
            path = os.path.join(a,item)
            print(path)
    

2.sys模块

python解释器相关的数据。

  • sys.getrefcount , 获取一个值的应用计数

    a = [11,22,33]
    b = a
    print(sys.getrefcount(a))
    
  • sys.getrecursionlimit , python默认支持的递归数量

  • sys.stdout.write --> print (进度)

    import time
    for i in range(1,101):
        msg = "%s%%\r" %i
        print(msg,end='')
        time.sleep(0.05)
    
    #进度显示
    import os
    
    # 1. 读取文件大小(字节)
    file_size = os.stat('20190409_192149.mp4').st_size
    
    # 2.一点一点的读取文件
    read_size = 0
    with open('20190409_192149.mp4',mode='rb') as f1,open('a.mp4',mode='wb') as f2:
        while read_size < file_size:
            chunk = f1.read(1024) # 每次最多去读取1024字节
            f2.write(chunk)
            read_size += len(chunk)
            val = int(read_size / file_size * 100)
            print('%s%%\r' %val ,end='')
    
  • sys.argv

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    """
    让用户执行脚本传入要删除的文件路径,在内部帮助用将目录删除。
    C:\Python36\python36.exe D:/code/s21day14/7.模块传参.py D:/test
    C:\Python36\python36.exe D:/code/s21day14/7.模块传参.py
    
    """
    import sys
    
    # 获取用户执行脚本时,传入的参数。
    # C:\Python36\python36.exe D:/code/s21day14/7.模块传参.py D:/test
    # sys.argv = [D:/code/s21day14/7.模块传参.py, D:/test]
    path = sys.argv[1]
    
    # 删除目录
    import shutil
    shutil.rmtree(path)
    

3.time

  • time.time() 获取当前时间
  • time.sleep('时间') 休眠时间

4.shutil

#删除
import shutil
shutil.rmtree(path)

模块小结

  • random
  • hashlib
  • getpass
  • time
  • os
  • sys
  • shutil

转载于:https://www.cnblogs.com/bigox/p/10720284.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值