这里记录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的使用(七)的更多相关文章

  1. Python基础学习笔记(七)常用元组内置函数

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-tuples.html 3. http://www.liaoxue ...

  2. python基础---->python的使用(三)

    今天是2017-05-03,这里记录一些python的基础使用方法.世上存在着不能流泪的悲哀,这种悲哀无法向人解释,即使解释人家也不会理解.它永远一成不变,如无风夜晚的雪花静静沉积在心底. Pytho ...

  3. Python基础--Python简介和入门

    ☞写在前面 在说Python之前,我想先说一下自己为什么要学Python,我本人之前也了解过Python,但没有深入学习.之前接触的语言都是Java,也写过一些Java自动化用例,对Java语言只能说 ...

  4. python基础-python解释器多版本共存-变量-常量

    一.编程语言的发展史 机器语言-->汇编语言-->高级语言,学习难度及执行效率由高到低,开发效率由低到高 机器语言:二进制编程,0101 汇编语言:用英文字符来代替0101编程 高级语言: ...

  5. python基础--python基本知识、七大数据类型等

    在此申明一下,博客参照了https://www.cnblogs.com/jin-xin/,自己做了部分的改动 (1)python应用领域 目前Python主要应用领域: 云计算: 云计算最火的语言, ...

  6. Python基础学习参考(七):字典和集合

    一.字典 字典跟列表一样是一组数据的集合.它的特点是什么呢? 特点一:字典具有键(key)和值(value),其中键必须是唯一的,不可重复的,即键必须可以哈希的.对于值没有要求. 特点二:字典是无序的 ...

  7. Python基础总结之第七天开始【总结字符串、列表、元组的常用方法】(新手可相互督促)

    前面的笔记说,python中的一切数据类型都是对象 我们在细化下就是:对象可由两部分组成:对象数据和对象方法 针对不同类型的数据对象,有不同的操作对象的方法. 那么我们开始看下字符串对象的常用方法: ...

  8. python基础整理笔记(七)

    一. python的类属性与实例属性的注意点 class TestAtt(): aaa = 10 def main(): # case 1 obj1 = TestAtt() obj2 = TestAt ...

  9. Python基础总结之第七天开始【认识函数的参数以及返回】(新手可相互督促)

    周日的早上,吃的饱饱,刷刷抖音,开始学习新一天的知识了~~~ 函数的参数: 昨天的笔记中,我们已经使用了参数,在案例中的name和sex 就是参数. 一般的函数都是有参数的,函数的参数都是放在函数定义 ...

随机推荐

  1. Linq to Entity 动态拼接查询条件(重点是OR)

    public static class PredicateExtensions { /// <summary> /// 机关函数应用True时:单个AND有效,多个AND有效:单个OR无效 ...

  2. windows上開啟多個apache服務器

    1.安裝apache(這裡我用的是集成環境) 比較php版本 5.6  與 7.2 比較mysql版本 拓展: 注意:對個不同的版本的mysql,命令行進入,需要指明端口號,如:mysql -uroo ...

  3. Yii2 session的使用方法(1)

    yii2打开session use yii\web\Session; $session = Yii::$app->session; // check if a session is alread ...

  4. glsl 全屏 uv 旋转

    原图 只是把fbo后的uv扭个角度就行了

  5. Linux服务器 java生成的图片验证码乱码问题

    问题:如图所示项目中生成的图形验证码不能正常显示出需要的字体 原因:  linux下没有对应的字体 查找项目中使用到系统字体的地方,如下: 解决: 1. 在本地 路径 C:\Windows\Fonts ...

  6. 带有Header的SOAP 请求

    package demo.test; import javax.xml.bind.JAXBElement; import javax.xml.namespace.QName; import org.t ...

  7. MacOS下MySQL配置

    先去官网下载一个 MySQL for mac http://www.cnblogs.com/xiaobo-Linux/ 命令行运行终端,运行下面两条命令: 1 2 alias mysql=/usr/l ...

  8. drools研究后记

    在实际工作中,有关于达标推断的业务逻辑 就是谁谁谁 消费满了多少钱.就返多少钱的优惠券 声明:不是drools不好,仅仅是在我遇到的场景下,不合适,不够好 在使用drools的时候发现有例如以下问题: ...

  9. 非抢占式RCU实现(二),解释:为什么 RCU_NEXT_SIZE 宏值是4?

    参考:2.6.34 一个很奇怪的问题. 没有查找到为什么 RCU_NEXT_SIZE的值为4的原因(包括Documentation),主要是在rcu_state中定义了一个四级的list,感到很有意思 ...

  10. nginx配置ThinkPHP配置

    配置时注意红色部分 server { listen 8888 default_server; #listen [::]:80 default_server; server_name _; root / ...