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'}

    友情链接

  • 相关阅读:
    新浪微盘又是一个给力的产品啊,
    InfoQ: 百度数据库架构演变与设计
    列式数据库——Sybase IQ
    MapR初体验 淘宝共享数据平台 tbdata.org
    IBM正式发布新一代zEnterprise大型机(组图) 大型机,IBM,BladeCenter,美国,纽约 TechWeb News
    1TB is equal to the number of how many GB? 1PB equal to is equal to the number of TB? 1EB PB? | PCfault.com
    Cassandra vs HBase | WhyNosql
    The Hadoop Community Effect
    雅虎剥离开源软件平台 Hadoop ,与风投新建 Hortonworks 公司 品味雅虎
    RowOriented Database 、ColumnOriented Database 、KeyValue Store Database 、DocumentOriented Database
  • 原文地址:https://www.cnblogs.com/huhx/p/baseuselearnpython7.html
Copyright © 2011-2022 走看看