zoukankan      html  css  js  c++  java
  • python 闭包,装饰器,random,os,sys,shutil,shelve,ConfigParser,hashlib模块

    闭包

    def make_arerage():
        l1 = []
        def average(price):
            l1.append(price)
            total = sum(l1)
            return total/len(l1)
        return average
    avg = make_everage()
    print(avg(100000))
    print(avg(110000))
    

    闭包的作用:

    # 闭包就是嵌套函数存在的,存在嵌套函数之中的,而且是内层函数对外层非全局变量的引用,会产生闭包。引用的变量也叫自由变量,不会随着函数的结束而消失,会一直保存在内存中,最终的目的是保证了数据的安全
    

    装饰器

    import time
    user = 'alex'
    passwd = 'abc13'
    
    
    def auth(auth_type):
        print("auth func:",auth_type)
        def outer_wrapper(func):
            def wrapper(*args, **kwargs):
                print("wrapper func args:",*args, **kwargs)
                if auth_type == "local":
                    usernmae = input("用户名>>>>>")
                    password = input("密码>>>>>>")
                    if user == usernmae and passwd == password:
                        print("33[32;1mUser33[0m")
                        return func(*args, **kwargs)
                    else:
                        exit("33[31;1m错误33[0m")
                elif auth_type == "ldap":
                    print("搞毛线ldap,不会。。。")
    
            return wrapper
        return outer_wrapper
    
    
    def index():
        print("in index")
    
    
    @auth(auth_type = "local")
    def home(name):
        print("in home",name)
        return "from home"
    
    
    @auth(auth_type = 'ldap')
    def bbs():
        print("in bbs")
    
    
    print(home('alex'))
    index()
    bbs()
    

    random模块

    import random
    random.random()
    random.randint(1,3) # 1-3的整数包括3
    import random
    print(random.random())
    print(random.randint(1,20))
    print(random.randrange(1,3)) # 顾头不顾尾,不包含3
    print(random.choice('12345')) # 可迭代对象中随机取一个
    print(random.sample('12345',2)) # 可迭代对象中随机取两个 
    print(random.uniform(1,10)) # 1-10的浮点数
    items = [1,2,3,4,5,6,7] 
    random.shuffle(items) #洗牌 打乱items的顺序
    print(items)
    
    import random
    checkcode = ''
    for i in range(4):
        checkcode += str(random.randrange(10))
    print(checkcode)
    

    os模块

    import os
    os.getcwd() 获取当前工作目录
    os.chdir("C\Users") 改变当前脚本工作
    os.curdir  返回当前目录:('.')
    os.pardir  获取当前目录的父目录:('..')
    os.makedirs(r"c:acd") 可生成多层递归目录
    os.removedirs(r"c:acd") 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,以此类推
    os.mkdir(r"dirname") 生成单级目录
    os.rmdir(r'dirname') 删除单级目录
    os.listdir(r'dirname') 查看当前的目录 包括隐藏文件,并以列表方式打印
    os.remove() 删除一个文件
    os.rename('oldname','newname') 重命名文件/目录
    os.stat('path/filename') 获取文件/目录信息
    os.sep 输出操作系统特定的路径分隔符,win下位“\”,Linux下为“/”
    os.linesep 输出当前当前平台使用的行终止符,win下为"
    ",Linux下为"
    "
    os.pathsep 输出用于分割文件路径的字符串
    os.name 输出字符串指示当前使用平台。win->'nt';linux->'posix'
    os.system("bash command") 运行shell命令,直接显示
    os.environ 获取系统环境变量
    os.path.abspath(path) 返回path规范化的绝对路径
    os.path.split(path) 将path分割成目录和文件名用元组返回
    os.path.dirname() 返回path的目录,其实就是os.path.split(path)的第一个元素
    os.path.basename(path) 返回path最后的文件名。如果path以/或结尾,那么就会返回空值。
    os.path.exists(path) 如果path存在,返回True,不存在返回False
    os.path.isabs(path) 如果path是绝对路径,返回True
    os.path.isfile(path) 如果path是一个存在的文件,则返回True,否则返回False
    os.path.isdir(path) 如果path是一个存在的目录,则返回True,否则返回False
    os.path.join(path1[,path2[,...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
    os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
    os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
    

    sys模块

    sys.argv 命令行参数List,第一个元素是程序本身路径
    sys.exit(n) 退出程序,正常退出时exit(0)
    sys.version 获取python解释程序的版本信息
    sys.maxint  最大的Int值
    sys.path    返回模块的搜索路径,初始化时使用python环境变量的值
    sys.platform 返回操作系统平台名称
    sys.stdout.write('please:')
    val = sys.stdin.readline()[:-1]
    

    shutil模块

    shutil.copyfile('userinfo1.txt','test1') # 复制文件到另一个文件
    shutil.copymode(src,dst) 仅拷贝权限、内容、组、用户均不变
    shutil.copysta(src,dst) 拷贝状态的信息,包括:mode bits,atime,mtime,flags
    shutil.copy(src,dst) 拷贝文件和权限
    shutil.copy2(src,dst) 拷贝文件和状态信息
    shutil.ignore_patterns(*patterns)
    shutil.copytree(src,dst,symlinks=False,ignore=None) 递归的去拷贝文件
    shutil.retree(path[,ignore_errors[,onerror]]) 递归的去删除文件
    shutil.move(src,dst) 递归的去移动文件
    shutil.make_archive('shutil_archive_test','zip','path(路径)') 把后边的文件夹压缩到shutil_archive_test.zip中
    shutil对压缩包的处理是调用ZipFile和TarFile两个模块来进行的
    import zipfile
    # 压缩
    z = zipfile.ZipFile('laxi.zip','w')
    z.write('a.log')
    z.write('data.data')
    z.close()
    
    # 解压
    z = zipfile.ZipFile('laxi.zip','r')
    z.extractall()
    z.close()
    
    import tarfile
    
    # 压缩
    tar = trafile.open("your.tar",'w')
    tar.add('/Users/xxx/bbs.zip', arcname='bbs.zip')
    tar.add('/Users/xxx/cmdb.zip', arcname='cmdb.zip')
    tar.close()
    
    # 解压
    tar = tarfile.open('your.tar','r')
    tar.extractall() # 可设置解压地址
    tar.close()
    
    

    shelve模块

    # shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式
    import shelve
    import datetime
    d = shelve.open('shelve_test') # 打开一个文件
    
    # class Test(object):
    #     def __init__(self,n):
    #         self.n = n
    # t = Test(123)
    # t2 = Test(123443)
    # info = {'age':18,'username':"sfs"} # 写进去
    #
    # name = ['alex','wuasi','twusi']
    # d['name'] = name # 吃酒列表
    # d['info'] = info # 持久dict
    # d['date'] = datetime.datetime.now()
    
    # 读出来
    print(d.get("name"))
    print(d.get("info"))
    print(d.get("date"))
    d.close()
    

    python读取xml,修改xml

    https://www.cnblogs.com/alex3714/articles/5161349.html
    

    ConfigParser 模块

    用于生成和修改常见配置文档,当前模块的名称在 python 3.x 版本中变更为 configparser

    [DEFAULT]
    serveraliveinterval = 45
    compression = yes
    compressionlevel = 9
    forwardx11 = yes
    
    [bitbucket.org]
    user = hg
    forwardx11 = yes
    
    [topsecret.server.com]
    host port = 50022
    forwardx11 = no
    
    
    # 写入
    import configparser
    
    config = configparser.ConfigParser()
    config["DEFAULT"] = {'ServerAliveInterval': '45',
                         'Compression': 'yes',
                         'CompressionLevel': '9'}
    
    config['bitbucket.org'] = {}
    config['bitbucket.org']['User'] = 'hg'
    
    config['topsecret.server.com'] = {}
    topsecret = config['topsecret.server.com']
    topsecret['Host Port'] = '50022'  # mutates the parser
    topsecret['ForwardX11'] = 'no'  # same here
    
    config['DEFAULT']['ForwardX11'] = 'yes'
    config['bitbucket.org']['ForwardX11'] = 'yes'
    with open('ha.conf', 'w') as configfile:
        config.write(configfile)
    
    
    # 读
    import configparser
    conf = configparser.ConfigParser()
    conf.read('ha.conf')
    
    print(conf.defaults())
    print(conf.sections())
    print(conf['bitbucket.org']['user'])
    

    hashlib模块

    # 用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法
    # 如果是中文的话,需要encode成utf-8编码
    import hmac
    h = hmac.new('字体'.encode('utf-8'))
    print(h.hexdigest())
    import hmac
    h = hmac.new(b'hello'.encode('utf-8'))
    print(h.hexdigest())
    
    import hashlib
    m = hashlib.md5()
    m.update(b"sdf")
    print(m.hexdigest())
    m.update(b"It's me")
    print(m.hexdigest())
    m.update(b"It's been a func")
    print(m.hexdigest())
    m2 = hashlib.md5()
    m2.update(b"HelloIt's me")
    print(m2.hexdigest())
    m3 = hashlib.sha1()
    m3.update(b"password")
    print(m3.hexdigest())
    
    
  • 相关阅读:
    cmanformat
    mysql-sql语言参考
    jQuery 判断多个 input checkbox 中至少有一个勾选
    Java实现 蓝桥杯 算法提高 计算行列式
    Java实现 蓝桥杯 数独游戏
    Java实现 蓝桥杯 数独游戏
    Java实现 蓝桥杯 数独游戏
    Java实现 蓝桥杯 算法提高 成绩排序2
    Java实现 蓝桥杯 算法提高 成绩排序2
    Java实现 蓝桥杯 算法提高 成绩排序2
  • 原文地址:https://www.cnblogs.com/alex3174/p/11222096.html
Copyright © 2011-2022 走看看