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

友情链接

原文地址:https://www.cnblogs.com/huhx/p/baseuselearnpython7.html