#普通装饰器基本格式
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

python学习day14 装饰器(二)&模块的更多相关文章

  1. python学习笔记--装饰器

    1.首先是一个很无聊的函数,实现了两个数的加法运算: def f(x,y): print x+y f(2,3) 输出结果也ok 5 2.可是这时候我们感觉输出结果太单一了点,想让代码的输出多一点看起来 ...

  2. Python学习 :装饰器

    装饰器(函数) 装饰器作为一个函数,可以为其他函数在不修改原函数代码的前提下添加新的功能 装饰器的返回值是一个函数对象.它经常用于有切面需求的场景,比如:插入日志.性能测试.事务处理.缓存.权限校验等 ...

  3. python 学习分享-装饰器篇

    本篇内容为偷窃的~哈哈,借用一下,我就是放在自己这里好看. 引用地址:http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 第一步: ...

  4. python学习之装饰器-

    python的装饰器 2018-02-26 在了解python的装饰器之前我们得了解python的高阶函数 python的高阶函数我们能返回一个函数名并且能将函数名作为参数传递 def outer() ...

  5. python学习 day13 装饰器(一)&推导式

    装饰器&推导式 传参位置参数在前,关键词参数在后 函数不被调用内部代码不被执行 函数在被调用的时候,每次都会开辟一个新的内存地址,互不干扰 #经典案例 def func(num): def i ...

  6. python学习之-- 装饰器

    高阶函数+嵌套函数 == 装饰器 什么是装饰器: 其实也是一个函数. 功能:为其他的函数添加附加功能 原则:不能修改被装饰的函数的源代码和调用方式 学习装饰器前首先要明白以下3条事项: 1:函数 即 ...

  7. Python学习笔记--装饰器的实验

    装饰器既然可以增加原来函数的功能,那能不能改变传给原函数的参数呢? 我们实验一下,先上代码: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date ...

  8. 6月4日 python学习总结 装饰器复习

    1.  装饰器的原理以及为什么要使用装饰器 在代码运行期间动态增加功能的方式,称之为"装饰器"(Decorator). 在不影响原代码结构的情况下为其添加功能 2.  装饰器的基本 ...

  9. Python学习之装饰器进阶

    函数知识回顾: 函数的参数分为:实参和形参. 实参:调用函数的时候传入的参数: 形参:分为3种(位置参数.默认参数.动态传参) 位置参数:必须传值 def aaa(a,b): print(a,b) a ...

随机推荐

  1. Docker 镜像编排并部署SpringBoot应用

    Docker-compose是一个基于Docker的编排工具,所谓编排个人理解就是将不同的镜像通过配置,组成一个新的运行环境,官方定义是:Compose is a tool for defining ...

  2. spring学习总结——高级装配学习四(运行时:值注入、spring表达式)

    前言: 当讨论依赖注入的时候,我们通常所讨论的是将一个bean引用注入到另一个bean的属性或构造器参数中.bean装配的另外一个方面指的是将一个值注入到bean的属性或者构造器参数中.在没有学习使用 ...

  3. SC命令

    描述:         SC 是用来与服务控制管理器和服务进行通信         的命令行程序. 用法:         sc <server> [command] [service n ...

  4. 使用django 中间件在所有请求前执行功能

    django中间是一个轻级,低耦合的插件,用来改变全局的输入和输出. 一 如何使用中间件 定义中间件 注册中间件 # 这是一个中间件代码片段的说明,在各个位置的代码将在何时执行 def simple_ ...

  5. 详解MongoDB中的多表关联查询($lookup)

    一.  聚合框架 聚合框架是MongoDB的高级查询语言,它允许我们通过转换和合并多个文档中的数据来生成新的单个文档中不存在的信息. 聚合管道操作主要包含下面几个部分: 命令 功能描述 $projec ...

  6. 推荐一款MongoDB的客户端管理工具--nosqlbooster

    今天给大家推荐一款MongoDB的客户端工具--nosqlbooster,这个也是我工作中一直使用的连接管理MongoDB的工具.这个工具还有个曾用名--mongobooster.nosqlboost ...

  7. 批量删除MSSQL 中主外键约束

    转自: http://www.maomao365.com/?p=813 在制作 MSSQL同步工具的时候,发现由于主外键的约束,导致数据同步异常,所有我们需要把 读数据库里面的主外键约束,进行批量删除 ...

  8. vue(1)——node.js安装使用,利用npm安装vue

    node node简介 node.js也是用js开发的语言,而且是一门服务端语言,更有大神利用node写了一个操作系统出来——NodeOS node能干什么 自带下载工具: 对于我们开发前端项目,no ...

  9. python3 正则表达式点星问号(.*?)能不能匹配换行符?不能的话应该怎么写

    python3的re模块使用过程中,正则的书写遇到了一些问题,就是使用.*?能不能匹配到换行符的问题. 答案是不能. 如果在匹配过程中遇到了也没关系,加上这个语句就好: \s+

  10. LNMP构建动态网站WordPress

    LNMP构建动态网站wordpress 一.部署LNMP架构 1.安装nginx #配置nginx源 cat>/etc/yum.repos.d/nginx.repo<<-EOF [N ...