zoukankan      html  css  js  c++  java
  • python基础---->python的使用(七)

      这里记录python关于io、装饰器和序列化的一些知识。面对大河我无限惭愧,我年华虚度,空有一身疲倦,和所有以梦为马的诗人一样,岁月易逝 一滴不剩。

    python的一些知识

    一、python中的装饰器的使用

    在调用now函数之前先打印一句话,@log放在函数的定义上面。

    def log(func):
        def wrapper(*args, **kwargs):
            print('call %s():' % func.__name__)
            return func(*args, **kwargs)
        return wrapper
    
    @log
    def now():
        print('2017-12-12')
    
    now()
    print(now.__name__)

    运行的结果如下:

    call now():
    2017-12-12
    wrapper

    如果是需要在装饰器中传递参数,需要在外面多嵌套一层。

    def log(text):
        def decorator(func):
            def warpper(*args, **kwargs):
                print('%s %s():' % (text, func.__name__))
                return func(*args, **kwargs)
            return warpper
        return decorator
    
    @log('hello world')
    def now():
        print('2017-12-12')
    
    now()
    print(now.__name__) 

    运行的结果如下:

    hello world now():
    2017-12-12
    warpper

    上面的两种now.__name__改成了warpper,一个完整的例子如下:

    import functools
    
    def log(func):
        @functools.wraps(func)
        def wrapper(*args, **kw):
            print('call %s():' % func.__name__)
            return func(*args, **kw)
        return wrapper

    import functools是导入functools模块。模块的概念稍候讲解。现在,只需记住在定义wrapper()的前面加上@functools.wraps(func)即可。

    二、python中偏函数的使用

    # 偏函数的使用
    print(int('12345', base=8))
    print(int('12345', base=16))
    
    # 这里面我们定义一个二进制的函数
    def int2(x, base=2):
        return int(x, base)
    print(int2('100101010')) #  298
    
    # 采用偏函数的话,可以直接固定一个函数的参数
    import functools
    int2 = functools.partial(int, base=2)
    print(int2('101001010')) # 330

    三、StringIO和BytesIO的使用

    from io import StringIO
    
    f = StringIO()
    f.write('hello')
    f.write(' world')
    print(f.getvalue())  # hello world
    
    # 读取StringIo的数据
    f = StringIO('Hello!
    Hi!
    Goodbye')
    while True:
        s = f.readline()
        if s == '':
            break
        print(s.strip())
    
    # StringIO只能操作str,如果是二进制的数据,就要用到bytesIO
    from io import BytesIO
    
    f = BytesIO()
    f.write('中文'.encode('utf-8'))
    print(f.getvalue())

    运行的结果如下:

    hello world
    Hello!
    Hi!
    Goodbye
    b'xe4xb8xadxe6x96x87'

    四、python中模块os操作目录和文件

    # 系统的名称
    import os
    print(os.name)
    
    # 环境变量
    print(os.environ)
    print(os.environ.get('JAVA_HOME'))
    
    # 文件和目录的操作
    print(os.path.abspath('.')) # G:JavaGoprogram2017-05-18LearnPython1	est10io
    print(os.path.join('C:/Users/michael', 'testdir'))
    os.mkdir(os.path.join('C:/Users/michael', '/testdir'))
    
    # 得到文件的目录和文件名称
    directory, filename = os.path.split('/Users/michael/testdir/file.txt')
    print(directory)
    print(filename)
    
    # 得到文件的后缀
    print(os.path.splitext('/path/to/file.txt')[1]) # .txt
    
    # 修改文件名和删除文件
    os.rename('test.txt', 'test.py')
    os.remove('test.py')
    
    # 文件的复制
    import shutil
    shutil.copyfile('/user/huhx.txt', '/user/linux.txt')

    五、python中的序列化

    import pickle
    
    d = dict(name='huhx', age=20, score=80)
    print(pickle.dumps(d))  # b'x80x03}qx00(Xx04x00x00x00nameqx01Xx04x00x00x00huhxqx02Xx03x00x00x00ageqx03Kx14Xx05x00x00x00scoreqx04KPu.'
    
    # 序列化
    f = open('dump.txt', 'wb')
    pickle.dump(d, f)
    f.close()
    
    # 反序列化
    f = open('dump.txt', 'rb')
    d = pickle.load(f)
    f.close()
    print(d) # {'name': 'huhx', 'age': 20, 'score': 80}
    
    import json
    
    print(json.dumps(d)) # {"name": "huhx", "age": 20, "score": 80}
    
    json_str = '{"age": 20, "score": 88, "name": "Bob"}'
    print(json.loads(json_str))  # {'age': 20, 'score': 88, 'name': 'Bob'}

    友情链接

  • 相关阅读:
    rand()和srand()关系很简单——一看就明白(通过一个可移植的源码)
    opencart配置mail服务
    dedecms mysql连接错误:#1040
    自动获取访客QQ
    apache虚拟目录设置
    在XAMPP上建立多个域名的站点
    QQ互联不能使用的通用解决方法
    织梦系统与discuz论坛整合方法
    DEDECMS整站复制
    DEDECMS模板中dede标签使用php和if判断语句的方法
  • 原文地址:https://www.cnblogs.com/huhx/p/baseuselearnpython7.html
Copyright © 2011-2022 走看看