模块,代码归类实现了某个功能的代码集合。

类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.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路径列表没有你想要的路径,那么怎么添加默认路径

  1.  通过 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的更多相关文章

  1. Python之旅Day4 闭包函数 模块及模块倒入

    闭包函数 闭包函数就是在内部函数当中有对外部函数名字的引用 ###代码示例1### def f1(): x =1 def f2(): print(x) return f2 f=f1() f() ### ...

  2. Python之路,Day4 - Python基础4 (new版)

    Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...

  3. 使用C/C++写Python模块

    最近看开源项目时学习了一下用C/C++写python模块,顺便把学习进行一下总结,废话少说直接开始: 环境:windows.python2.78.VS2010或MingW 1 创建VC工程 (1) 打 ...

  4. Python模块之configpraser

    Python模块之configpraser   一. configpraser简介 用于处理特定格式的文件,其本质还是利用open来操作文件. 配置文件的格式: 使用"[]"内包含 ...

  5. Python模块之"prettytable"

    Python模块之"prettytable" 摘要: Python通过prettytable模块可以将输出内容如表格方式整齐的输出.(对于用Python操作数据库会经常用到) 1. ...

  6. python 学习第五天,python模块

    一,Python的模块导入 1,在写python的模块导入之前,先来讲一些Python中的概念性的问题 (1)模块:用来从逻辑上组织Python代码(变量,函数,类,逻辑:实现一个功能),本质是.py ...

  7. windows下安装python模块

    如何在windows下安装python模块 1. 官网下载安装包,比如(pip : https://pypi.python.org/pypi/pip#downloads) pip-9.0.1.tar. ...

  8. 安装第三方Python模块,增加InfoPi的健壮性

    这3个第三方Python模块是可选的,不安装的话InfoPi也可以运行. 但是如果安装了,会增加InfoPi的健壮性. 目录 1.cchardet    自动检测文本编码 2.lxml    用于解析 ...

  9. Python基础篇【第5篇】: Python模块基础(一)

    模块 简介 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就 ...

随机推荐

  1. 如何写 JS 的链式调用 ---》JS 设计模式《----方法的链式调用

    1.以$ 函数为例.通常返回一个HTML元素或一个元素集合. 代码如下: function $(){ var elements = []; ;i<arguments.length;i++){ v ...

  2. 动态创建DAL层类的实例

    为了可扩展性,方便以后对于代码的修改维护,使用动态创建DAL层对象. 1.首先在webconfig中的configuration下添加配置项 <appSettings> <add k ...

  3. 用winform程序来了解委托和事件

    一.浅谈委托 如果有个过winform 和webform 程序开发的小伙伴一定有个这样的感觉吧,点击Button直接就执行了那个方法,到此他是怎么实现了的呢,大家有考虑过没有? 回到正题,什么是委托呢 ...

  4. iOS新手引导页的实现,源码。

    /*.在Main.storyboard中找到,ScrollView和PageControl并添加到ViewController中. .在ScrollView中添加ImageView,新手引导页有几个图 ...

  5. C# Cookie

    1  推荐使用 is 或 as 操作符而不是强制 2  编码风格:Tab ——改成两个 C# 文档注释的快捷键  (将配置表压缩,从压缩文件中查找xml配置表 这个是指Unity项目上面)   尽量使 ...

  6. 【Java EE 学习 57】【酒店会员管理系统之分页模板书写】

    分页一直是一个比较麻烦的问题,特别是在我做的这个系统中更是有大量的分页,为了应对该问题,特地写了一个模板以方便代码重用,该模板包括后台分页的模板.前端显示的模板两部分. 一.分页分析 分页需要三种类型 ...

  7. .Net中Remoting通信机制

    Remoting通信机制 Remoting介绍 主要元素 通道类型 激活方式 对象定义 Remoting介绍 什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方式. 从微软的产品角度 ...

  8. AngularJS学习 01进入Angular世界

    Angular下载 各个版本的下载地址:https://code.angularjs.org/ 打开上述URL,页面如下图: 点击需要的版本,跳出如下页面: 点击红色框内容即可下载完整的压缩包. 还可 ...

  9. Linux内核:kthread_create(线程)、SLEEP_MILLI_SEC

    转自:http://blog.csdn.net/guowenyan001/article/details/39230181 一.代码 #include <linux/module.h> # ...

  10. ssh反向连接和简单实现

    转自:http://blog.chinaunix.net/uid-20109107-id-2954579.html SSH反向连接的使用 1.什么是反向连接?反向连接是指主机A(受控端)主动连接主机B ...