Python模块之day4
模块,代码归类实现了某个功能的代码集合。
类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。
如:os 是系统相关的模块;file是文件操作相关的模块
模块分为三种:
- 自定义模块
- 第三方模块
- 内置模块
自定义模块
1.定义模块

2.导入模块
导入模块默认寻找的路径
import sys
#print sys.path
for i in sys.path:
print(i) C:\Users\Administrator\PycharmProjects\dbb0928\1106 #pycharm 自动添加的路径
C:\Users\Administrator\PycharmProjects\dbb0928 #IDIL,或者Linux里没有,最好忽略
C:\python\python35.zip
C:\python\DLLs
C:\python\lib
C:\python
C:\python\lib\site-packages
上面的路径,即是调用模块的顺序,一旦找到调用的函数,则停止寻找 ****模块名称命名很重要****
自定义的模块名字不要跟系统的模块命名相同,不然会首先调用你自己的函数,忽略系统函数
如果sys.path路径列表没有你想要的路径,那么怎么添加默认路径
- 通过 sys.path.append('路径') 添加。
import sys
import os pre_path = os.path.abspath('../')
sys.path.append(pre_path)
2. 设置环境变量PYTHONPATH
该环境变量的内容会被自动添加到模块搜索路径中。设置方式与设置Path环境变量类似。注意只需要添加你自己的搜索路径,Python自己本身的搜索路径不受影响。
导入模块的方式
#推荐导入方法
1.单模块,在同一目录下
import module #导入可以调用该模块的所有函数,使用方法module.xxx() 2.嵌套在文件夹下
from module.xx.xx import xx #导入模块里的某个函数
from module.xx.xx import xx as rename # 当模块名字相同是,可以重命名
from module.xx.xx import * #导入模块下的所有函数,不建议使用,容易重名
开源模块
1.下载安装
下载安装有两种方式:
#方式一
yum
pip
apt-get
... #方式二 下载源码
解压源码
进入目录
编译源码 python setup.py build
安装源码 python setup.py install #注:在使用源码安装时,需要使用到gcc编译和python开发环境,所以,需要先执行:
yum install gcc
yum install python-devel
或
apt-get python-dev
安装成功后,模块会自动安装到 sys.path 中的某个目录中,如:
/usr/lib/python3.5/site-packages/
python 序列化
把变量从内存中变成可存储或传输的过程称之为序列化,在程序运行的过程中,所有的变量都是在内存中,那么我们修改某个字典的values后,如果程序退出,则下次再运行程序,values,则会被初始化原来的值。
如果序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。
反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。
Python用于序列化的两个模块:
1. pickle
pickle,用于python特有的类型 和 python的数据类型间进行转换,支持Python所有的数据类型,一般用于比较复杂的序列化,如游戏数据存档。
- dump,dumps
#pickle.dumps()方法把任意对象序列化成一个bytes,然后,就可以把这个bytes写入文件
>>> import pickle
>>> d = {'name':'bob','age':14,'score':88}
>>> pickle.dumps(d)
b'\x80\x03}q\x00(X\x05\x00\x00\x00scoreq\x01KXX\x03\x00\x00\x00ageq\x02K\x0eX\x04\x00\x00\x00nameq\x03X\x03\x00\x00\x00bobq\x04u.' #另一个方法pickle.dump()直接把对象序列化后写入一个file-like Object:
>>> f = open('dump.txt','wb')
>>> pickle.dump(d,f)
>>> f.close()
- load,loads
#字符串反序列化,文件里可以先把内容读到一个bytes,然后用pickle.loads()方法反序列化出对象 >>> print(d)
{'score': 88, 'age': 14, 'name': 'bob'}
>>> nb = pickle.dumps(d)
>>> print (nb)
b'\x80\x03}q\x00(X\x05\x00\x00\x00scoreq\x01KXX\x03\x00\x00\x00ageq\x02K\x0eX\x04\x00\x00\x00nameq\x03X\x03\x00\x00\x00bobq\x04u.'
>>> pickle.loads(nb)
{'name': 'bob', 'age': 14, 'score': 88} #也可以直接用pickle.load()方法从一个file-like Object中直接反序列化出对象 >>> d = pickle.load(f)
>>> f.close()
>>> d
{'name': 'bob', 'age': 14, 'score': 88}
2.json
json,用于字符串 和 python数据类型间进行转换,仅支持python的基本数据类型,但可以在语言之间传递对象,能直接在Web页面中读取,非常方便。
- dump,dumps,load,loads
#把Python对象变成一个JSON:
>>> import json
>>> d = dict(name='Bob', age=20, score=88)
>>> json.dumps(d) # dumps()方法返回一个str
'{"age": 20, "score": 88, "name": "Bob"}' #使用dump写入文件
>>>with open('dump.txt','w') as f:
json.dump(d,f) #JSON反序列化为Python对象: >>> json_str = '{"age": 20, "score": 88, "name": "Bob"}' #注意字典里一定要双引号
>>> json.loads(json_str)
{'age': 20, 'score': 88, 'name': 'Bob'} #使用load 读出文件
>>> with open ('load.txt','r') as f:
ret= json.load(f)
print('ret')
- 进阶用法
#有时候,我们更喜欢用class表示对象,比如定义Student类,然后序列化:
import json class Student(object):
def __init__(self, name, age, score):
self.name = name
self.age = age
self.score = score s = Student('Bob', 20, 88)
print(json.dumps(s)) #错误输出
Traceback (most recent call last):
...
TypeError: <__main__.Student object at 0x10603cc50> is not JSON serializable
错误的原因是Student对象不是一个可序列化为JSON的对象 #然而可选参数default就是把任意一个对象变成一个可序列为JSON的对象,我们只需要为Student专门写一个转换函数,再把函数传进去即可: def student2dict(std):
return {
'name': std.name,
'age': std.age,
'score': std.score
} #这样,Student实例首先被student2dict()函数转换成dict,然后再被顺利序列化为JSON: >>> print(json.dumps(s, default=student2dict))
{"age": 20, "name": "Bob", "score": 88} #不过,下次如果遇到一个Teacher类的实例,照样无法序列化为JSON。我们可以偷个懒,把任意class的实例变为dict: print(json.dumps(s, default=lambda obj: obj.__dict__)) ##同样的道理,如果我们要把JSON反序列化为一个Student对象实例,loads()方法首先转换出一个dict对象,然后,我们传入的object_hook函数负责把dict转换为Student实例: def dict2student(d):
return Student(d['name'], d['age'], d['score']) 运行结果如下: >>> json_str = '{"age": 20, "score": 88, "name": "Bob"}'
>>> print(json.loads(json_str, object_hook=dict2student))
<__main__.Student object at 0x10cd3c190>
Python模块之day4的更多相关文章
- Python之旅Day4 闭包函数 模块及模块倒入
闭包函数 闭包函数就是在内部函数当中有对外部函数名字的引用 ###代码示例1### def f1(): x =1 def f2(): print(x) return f2 f=f1() f() ### ...
- Python之路,Day4 - Python基础4 (new版)
Python之路,Day4 - Python基础4 (new版) 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...
- 使用C/C++写Python模块
最近看开源项目时学习了一下用C/C++写python模块,顺便把学习进行一下总结,废话少说直接开始: 环境:windows.python2.78.VS2010或MingW 1 创建VC工程 (1) 打 ...
- Python模块之configpraser
Python模块之configpraser 一. configpraser简介 用于处理特定格式的文件,其本质还是利用open来操作文件. 配置文件的格式: 使用"[]"内包含 ...
- Python模块之"prettytable"
Python模块之"prettytable" 摘要: Python通过prettytable模块可以将输出内容如表格方式整齐的输出.(对于用Python操作数据库会经常用到) 1. ...
- python 学习第五天,python模块
一,Python的模块导入 1,在写python的模块导入之前,先来讲一些Python中的概念性的问题 (1)模块:用来从逻辑上组织Python代码(变量,函数,类,逻辑:实现一个功能),本质是.py ...
- windows下安装python模块
如何在windows下安装python模块 1. 官网下载安装包,比如(pip : https://pypi.python.org/pypi/pip#downloads) pip-9.0.1.tar. ...
- 安装第三方Python模块,增加InfoPi的健壮性
这3个第三方Python模块是可选的,不安装的话InfoPi也可以运行. 但是如果安装了,会增加InfoPi的健壮性. 目录 1.cchardet 自动检测文本编码 2.lxml 用于解析 ...
- Python基础篇【第5篇】: Python模块基础(一)
模块 简介 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就 ...
随机推荐
- SB Admin 2 学习笔记1
需要掌握能够搭建起一个 dashboard 的能力, 因为很少有运维开发团队有专职的前端, bootstrap 也要讲个基本法. SB Admin 2, 一个免费的 bootstrap theme, ...
- 【转】 Android WebView内容宽度自适应
我们平常在项目中有可能会遇到网页的内容是通过json数据传递到app上面用WebView来显示的,这时候我们通常都要调整内容的总宽度不超过父容器的宽度,这样子用户可以不用左右滑动就可以看到全部的内容. ...
- 12. UITextField
1. UITextField 的认识 UItextField通常用于外部数据输入,以实现人机交互.比如我们QQ.微信的登录界面中让你输入账号和密码的地方 2. UITextField 控件的属性设置 ...
- vue.js 接收url参数
1) 路由配置传参方式 在配置路由时 例如 "/firewall/authorize/:uid/:uname/:token" 页面url为 http://XXX.com/firew ...
- win10下安装mysql5.7.16(解压缩版)
注:本文涉及的是解压缩版的安装 安装教程 下载mysql 地址是:http://dev.mysql.com/downloads/mysql/ 解压缩下载的文件 修改ini文件(在解压缩后的mysql文 ...
- Navicat Premium连接Oracle 问题汇总
- python之模块
模块即一推代码的集合来实现某个功能,使用时直接调用,甚是方便. 模块又分为三种 自定义模块 内置模块 第三方模块 下面就来介绍介绍什么是内置模块及如何去使用它和内置模块的好处. 使用模块模块前首先导入 ...
- html小结
网页开发工具:visual studio.net网页构架,方便设置标签属性,颜色值得属性有两种. 一.html的基本框架结构: <html> ----- <head> < ...
- LeetCode 206 Reverse a singly linked list.
Reverse a singly linked list. Hint: A linked list can be reversed either iteratively or recursively. ...
- 搭建LAMP环境注意事项
一:安装mysql 5.5以上版本需要使用cmake 和 bison 并且需要安装ncurses 在安装MySQL完毕之后,需要覆盖 掉 /etc/my.cnf centos默认会有一个my.cnf文 ...