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!\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‘}

友情链接

时间: 2024-11-06 03:33:56

python基础---->python的使用(七)的相关文章

Python基础-Python流程控制

上篇文章 Python基础-基础使用 我们已经知道了Python解释器,Python的变量.和Python的输入输出.Python的注释和字符集,这篇文章,我们主要讲Python的流程控制 本文防盗链:http://python789.blog.51cto.com Python基础-Python流程控制 1.条件判断 1.1.if基本使用 if就是一个条件判断的,当满足不同样的条件的时候执行不同的操作,如法如下: if 条件1:     满足条件1 代码框 elif 添加2:     满足条件2

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

参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-tuples.html 3. http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000 Python常用元组内置函数: 序号 方法及描述 1 cmp(tuple1, tuple2)比较两个元组元素. 2 len(tuple)计算元组元素个数. 3 max(tuple)

Python基础教程系列:七、字典

字典是Python语言中唯一的映射类型.映射类型不要求用数字值做索引就可以从一个容器中获取对应的数据项.你可以用键(key)直接映射到值,这就是为什么叫映射的原因,映射,我的理解就是索引,顺藤摸瓜就可以找到背后的幕后者.字典是Python中最强大的数据类型之一. 刚开始接触字典还是在Hadoop中的mapreduce,其实说白了就是键值对(key/value),所谓的索引通常是指key,而幕后者通常指的是value.每个key对应一个value,主要的好处是方面归类,而且按照key进行查找val

python基础----&gt;python的使用(三)

今天是2017-05-03,这里记录一些python的基础使用方法.世上存在着不能流泪的悲哀,这种悲哀无法向人解释,即使解释人家也不会理解.它永远一成不变,如无风夜晚的雪花静静沉积在心底. Python的基础学习 一.python中函数作为参数 import math def add(x, y, f): return f(x) + f(y) print(add(25, 9, math.sqrt)) # 8.0 二.python引用自定义模块 在同目录下面定义两个文件huhx.py和huhx5.p

重学Python - Day 05 - python基础 -&gt; python的文件操作:r、w、a、r+、a+ 、readline、readlines 、flush等常用的文件方法

文件的读操作 示例: 1 print("->文件句柄的获取,读操作:") 2 3 f = open('无题','r',encoding='utf8') 4 d = f.read() 5 f.close() 6 print(d) 7 8 print('->例二:') 9 f = open('无题','r',encoding='utf8') 10 e = f.read(9) 11 f.close() 12 print(e) 13 #python3中,文件中一个中英文都占位1 运

重学Python - Day 01 - python基础 -&gt; python版本选择+第一个小程序

题外话: Python版本:最新的3.6 安装注意点:勾选添加路径后自定义安装到硬盘的一级目录,例如本人的安装路径: F:\Python 原因:可以自动添加python环境变量,自动关联.py文件,其余的优点很多,例如学习selenium的,使用pip install selenium命令就可以安装selenium 3了,虽然python webdriver的自动化还是2.7居多,但是3.0会是未来 闲言碎语以后再说,现在正式开始学习Python,没办法,不会编程的测试在工作中好吃力,学不会py

python基础篇【第七篇】面向对象(上)

提到面向对象,总是离不开几个重要的术语:多态(Polymorphism),继承(Inheritance)和封装(Encapsulation) 定义一个类可以采用下面的方式来定义: class className: #定义函数用def 定义类也是一样需要class block 注意类名后面有个冒号,在block块里面就可以定义属性和方法了.当一个类定义完之后,就产生了一个类对象.类对象支持两种操作:引用和实例化.引用操作是通过类对象去调用类中的属性或者方法,而实例化是产生出一个类对象的实例,称作实

Python基础学习笔记(七)——常用操作符

python常用的操作符有:算数运算操作符.逻辑操作符.比较操作符,下面分别说明. 1.算数运算操作符 +    加法操作符 -    减法操作符 *    乘法操作符 /    除法操作符(精确运算) //     除法操作符(结果为整数,忽略计算结果的小数部分) **    幂运算符,即乘方运算 %    取模运算符,即求余数 2.比较操作符 >    大于 >=    大于或等于 <    小于 <=    小于或等于 ==    等于 !=    不等于 3.逻辑操作符 n

python基础整理笔记(七)

一. python的类属性与实例属性的注意点 1 class TestAtt(): 2 aaa = 10 3 4 def main(): 5 # case 1 6 obj1 = TestAtt() 7 obj2 = TestAtt() 8 print obj1.aaa, obj2.aaa, TestAtt.aaa 9 10 # case 2 11 obj1.aaa += 1 12 print obj1.aaa, obj2.aaa, TestAtt.aaa 13 14 # case 3 15 Te

python基础篇【第七篇】模块补充、xml操作

一.ConfigParser模块 用于对特定的配置进行操作,当前模块的名称在 python 3.x 版本中变更为 configparser. 配置文件的格式是: []包含的叫section,    section 下有option=value这样的键值 [section1] k1 = v1 k2:10 [section2] k1 = v1 读取配置文件: -read(filename) 直接读取ini文件内容-sections() 得到所有的section,并以列表的形式返回-options(s