python基础---->python的使用(七),,  这里记录pyth


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

python的一些知识

一、python中的装饰器的使用

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

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

运行的结果如下:

call now():2017-12-12wrapper

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

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-12warpper

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

import functoolsdef 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 functoolsint2 = functools.partial(int, base=2)print(int2(‘101001010‘)) # 330

三、StringIO和BytesIO的使用

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

运行的结果如下:

hello worldHello!Hi!Goodbyeb‘\xe4\xb8\xad\xe6\x96\x87‘

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

# 系统的名称import osprint(os.name)# 环境变量print(os.environ)print(os.environ.get(‘JAVA_HOME‘))# 文件和目录的操作print(os.path.abspath(‘.‘)) # G:\Java\Go\program\2017-05-18\LearnPython1\test10\ioprint(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 shutilshutil.copyfile(‘/user/huhx.txt‘, ‘/user/linux.txt‘)

五、python中的序列化

import pickled = dict(name=‘huhx‘, age=20, score=80)print(pickle.dumps(d))  # b‘\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00huhxq\x02X\x03\x00\x00\x00ageq\x03K\x14X\x05\x00\x00\x00scoreq\x04KPu.‘# 序列化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 jsonprint(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‘}

友情链接

python基础---->python的使用(七)

评论关闭