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():
--
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 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('', 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 StringIO f = 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 BytesIO f = 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 pickle d = 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 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'}
友情链接
python基础---->python的使用(七)的更多相关文章
- Python基础学习笔记(七)常用元组内置函数
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-tuples.html 3. http://www.liaoxue ...
- python基础---->python的使用(三)
今天是2017-05-03,这里记录一些python的基础使用方法.世上存在着不能流泪的悲哀,这种悲哀无法向人解释,即使解释人家也不会理解.它永远一成不变,如无风夜晚的雪花静静沉积在心底. Pytho ...
- Python基础--Python简介和入门
☞写在前面 在说Python之前,我想先说一下自己为什么要学Python,我本人之前也了解过Python,但没有深入学习.之前接触的语言都是Java,也写过一些Java自动化用例,对Java语言只能说 ...
- python基础-python解释器多版本共存-变量-常量
一.编程语言的发展史 机器语言-->汇编语言-->高级语言,学习难度及执行效率由高到低,开发效率由低到高 机器语言:二进制编程,0101 汇编语言:用英文字符来代替0101编程 高级语言: ...
- python基础--python基本知识、七大数据类型等
在此申明一下,博客参照了https://www.cnblogs.com/jin-xin/,自己做了部分的改动 (1)python应用领域 目前Python主要应用领域: 云计算: 云计算最火的语言, ...
- Python基础学习参考(七):字典和集合
一.字典 字典跟列表一样是一组数据的集合.它的特点是什么呢? 特点一:字典具有键(key)和值(value),其中键必须是唯一的,不可重复的,即键必须可以哈希的.对于值没有要求. 特点二:字典是无序的 ...
- Python基础总结之第七天开始【总结字符串、列表、元组的常用方法】(新手可相互督促)
前面的笔记说,python中的一切数据类型都是对象 我们在细化下就是:对象可由两部分组成:对象数据和对象方法 针对不同类型的数据对象,有不同的操作对象的方法. 那么我们开始看下字符串对象的常用方法: ...
- python基础整理笔记(七)
一. python的类属性与实例属性的注意点 class TestAtt(): aaa = 10 def main(): # case 1 obj1 = TestAtt() obj2 = TestAt ...
- Python基础总结之第七天开始【认识函数的参数以及返回】(新手可相互督促)
周日的早上,吃的饱饱,刷刷抖音,开始学习新一天的知识了~~~ 函数的参数: 昨天的笔记中,我们已经使用了参数,在案例中的name和sex 就是参数. 一般的函数都是有参数的,函数的参数都是放在函数定义 ...
随机推荐
- 分享一个MAC下绕开百度网盘限速下载的方法,三步操作永久生效
相信大家都比较困惑,百度网盘客户端限速后一般只有几十K的下载速度,Windows有百度网盘破解版,但MAC的破解版似乎不存在,要提速的话,一般的做法是开超级会员(27元/月),身为程序员的我们,是不是 ...
- svn -- svn安装与配置
1.SVN分为服务器端与客户端 l 服务器端:VisualSVN SubVersion l 客户端:TortoiseSVN server http://www.visualsvn.com/ cli ...
- 表单提交之List集合
一.表单数据 <div class="panel panel-default"> <div class="panel-heading"> ...
- 监听输入框值变化的最佳方案 oninput 和 onpropertychange (实时监控文本框改变的最佳方案)
公司有个文本框,当输入文字/粘贴/复制 或者是键盘猛按的时候,都希望这个文本框能统计出 输入了多少字 这种用 onchange onkeyup onkepress 都不怎么好使 最后在 ...
- 第1章:认识Shell脚本
第一章:认识Shell脚本 1.1.什么是Shell Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行. 实际上Shell是一个命令解释器 ...
- ASP.NET C# 登陆窗体 限制用户名只输入字母 数字以及下划线
文本框的输入限制,我们主要集中两个问题: 一.怎样限制用户名输入的长度? 答:设置txtName的属性 MaxLength="; (我们这里以10个字符为例) 二.怎样限制用户名只输入字母 ...
- vue给input file绑定函数获取当前上传的对象
HTML <input type="file" @change="tirggerFile($event)"> JS(vue-methods) tir ...
- [Unity3D]关于NaN(Not a Number)的问题
在游戏运行时,代码若写得不安全很容易出现NAN的异常.一旦NAN出现整个游戏不崩溃也坏死掉了,游戏上了则是要被直接打回来的节奏,更是一个开发及测试人员每人都要扣3000块的大BUG. 一般表现为: ...
- 消息队列库——ZeroMQ
消息队列库——ZeroMQ ZeroMQ(简称ZMQ)是一个基于消息队列的多线程网络库,其对套接字类型.连接处理.帧.甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字. ZMQ是网络通信中新的 ...
- 线程与COM
场景: C++部分封装为COM,C#来调用.调用可能是在线程中的. 应用程序退出时,C#的部分 自动清理,某些线程可能还没有完全停掉. COM内部的东西也在释放内存. 这个时候,稍有不慎,就会崩溃. ...