首页 技术 正文
技术 2022年11月21日
0 收藏 491 点赞 4,888 浏览 2622 个字

  这里记录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():
--
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():
--
warpper

上面的两种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('', base=8))
print(int('', base=16))# 这里面我们定义一个二进制的函数
def int2(x, base=2):
return int(x, base)
print(int2('')) ## 采用偏函数的话,可以直接固定一个函数的参数
import functools
int2 = functools.partial(int, base=2)
print(int2('')) #

三、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,如果是二进制的数据,就要用到bytesIO
from io import BytesIOf = BytesIO()
f.write('中文'.encode('utf-8'))
print(f.getvalue())

运行的结果如下:

hello world
Hello!
Hi!
Goodbye
b'\xe4\xb8\xad\xe6\x96\x87'

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

# 系统的名称
import os
print(os.name)# 环境变量
print(os.environ)
print(os.environ.get('JAVA_HOME'))# 文件和目录的操作
print(os.path.abspath('.')) # G:\Java\Go\program\2017-05-18\LearnPython1\test10\io
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 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模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,026
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,517
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,364
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,145
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,779
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,856