python基础---->python的使用(七),, 这里记录pyth
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的使用(七)
评论关闭