进击python第4篇:初探模块
模块,用一砣代码实现了某个功能的代码集合,任何python程序都可以作为模块导入,n个 .py 文件组成的代码集合就称为模块。
but 为什么要引入模块概念?主要原因是代码重用(code reuse)。请记住:为了让代码可重用,请将它模块化!!!
模块分为三种:
- 自定义模块
- 内置模块
- 开源模块
定义模块
1.单个py文件就可作为模块
2.为了组织好模块,将它们分组为包(package),当模块存储在py文件中时,包就是模块所在的目录。记住:为了让python将其作为包对待,必须包含一个名为__init__.py的模块
接下来,如何使用模块?就需要将放置在定义的path路径中的模块导入
路径(linux环境下):
>>> import sys,pprint
>>> pprint.pprint(sys.path)
['',
'/usr/lib64/python26.zip',
'/usr/lib64/python2.6',
'/usr/lib64/python2.6/plat-linux2',
'/usr/lib64/python2.6/lib-tk',
'/usr/lib64/python2.6/lib-old',
'/usr/lib64/python2.6/lib-dynload',
'/usr/lib64/python2.6/site-packages',
'/usr/lib/python2.6/site-packages']
>>>
打印sys模块(python解释器相关)中path变量,可以看出是列表,因此:
>>> sys.path.append('/root/')
>>> pprint.pprint(sys.path)
['',
'/usr/lib64/python26.zip',
'/usr/lib64/python2.6',
'/usr/lib64/python2.6/plat-linux2',
'/usr/lib64/python2.6/lib-tk',
'/usr/lib64/python2.6/lib-old',
'/usr/lib64/python2.6/lib-dynload',
'/usr/lib64/python2.6/site-packages',
'/usr/lib/python2.6/site-packages',
'/root/']
>>>
导入方法:
import module
from module.xx.xx import xx
from module.xx.xx import xx as rename
from module.xx.xx import *
探究模块
Python之所以应用越来越广泛,在一定程度上也依赖于其为程序员提供了大量的模块以供使用,那如何获知模块能做什么?授之以鱼不如授之以渔
以copy模块为例
1.使用tab键
参考readline和rlcompleter模块,做如下操作
[root@test site-packages]# cd /usr/lib/python2.6/site-packages
[root@test site-packages]# vim tab.py
1 #!/usr/bin/python
2 import sys
3 import readline
4 import rlcompleter
5 import os
6 readline.parse_and_bind('tab: complete')
7 histfile =os.path.join(os.environ['HOME'],'.pythonhistory')
[root@test site-packages]# python
>>> import tab,copy
>>> copy. #tab键
copy.Error( copy.__package__ copy._deepcopy_dispatch
copy.PyStringMap copy.__reduce__( copy._deepcopy_inst(
copy._EmptyClass copy.__reduce_ex__( copy._deepcopy_list(
copy.__all__ copy.__repr__( copy._deepcopy_method(
copy.__class__( copy.__setattr__( copy._deepcopy_tuple(
copy.__delattr__( copy.__sizeof__( copy._keep_alive(
copy.__dict__ copy.__str__( copy._reconstruct(
copy.__doc__ copy.__subclasshook__( copy._test(
copy.__file__ copy._copy_dispatch copy.copy(
copy.__format__( copy._copy_immutable( copy.deepcopy(
copy.__getattribute__( copy._copy_inst( copy.dispatch_table
copy.__hash__( copy._copy_with_constructor( copy.error(
copy.__init__( copy._copy_with_copy_method( copy.name
copy.__name__ copy._deepcopy_atomic( copy.t(
copy.__new__( copy._deepcopy_dict(
2.dir
>>> import copy
>>> [n for n in dir(copy) if not n.startswith('_')]
['Error', 'PyStringMap', 'copy', 'deepcopy', 'dispatch_table', 'error', 'name', 't']
3.help
使用help获取模块具体功能
>>> help(copy.copy)
Help on function copy in module copy: copy(x)
Shallow copy operation on arbitrary Python objects. See the module's __doc__ string for more info.
4.第三方开发工具pycharm
当然最快捷的就是使用第三方工具
下载地址:http://www.jetbrains.com/pycharm/download/
快速激活方法:http://idea.lanyus.com/ (>_<)
标准库:一些最爱
1.os
用于提供访问多个操作系统级别的操作
os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname
os.makedirs('dirname1/dirname2') 可生成多层递归目录
os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rm dirname
os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.system("bash command") 运行shell命令,直接显示,但拿不到返回值
os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) 如果path是绝对路径,返回True
os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间
os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
os.system:用于运行外部程序,例如启动浏览器
unix中:os.system(‘/usr/bin/firefox’)
windows:os.system(r’c:\”Program Files”\”Mozilla FireFox”\firefox.exe’)
注意:将Program Files和Mozilla FireFox作为整体字符串放入引号,以免程序误解;同此,window引用特有函数—os.startfile:
windows:os.system(r’c:\Program Files\Mozilla FireFox\firefox.exe’)
为了更简洁,启动浏览器引入了webbrowser模块:
>>> import webbrowser
>>> webbrowser.open('http://www.baidu.com')
True
之后网页就以默认的浏览器打开,简洁吧?
2.fileinput
前面介绍了文件操作open()或file(),同此fileinput模块可轻松地遍历文本文件中的所有行
fileinput.filename 返回正在处理的文件名
fileinput.lineno 返回处理过的行数,数值是累加的
fileinput.filelineno 返回当前文件处理的行数
fileinput.nextfile 会关闭当前文件,跳到下一文件
fileinput.close 结束迭代
fileinput.input 模块中最重要的函数,返回用于for循环遍历对象
3.Json/Pickle
用于序列化的两个模块
- · json,用于字符串 和 python数据类型间进行转换
- · pickle,用于python特有的类型 和 python的数据类型间进行转换
Json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load
json和xml共同作用都是不同语言、程序之间的数据交换,充当翻译角色
import pickle
import json
#json用于处理常用的数据类型如字典、序列
dic = {
'lzl':{"age":22},
'bruce':{'age':25}
}
li = [1,2,'a','v']
###dumps 不会写入,所以需用write写入文件
# transfer = json.dumps(dic)
# transfer1 = json.dumps(li)
# print type(transfer) #<type 'str'>
# print type(transfer1)#<type 'str'> # with open('to_disk.txt','r+') as obj:
# obj.write(transfer+'\n')
# obj.write(transfer1)
###dump 会写入文件
with open('to_disk.txt','w') as obj:
json.dump(dic,obj) ###loads读取
# with open('to_disk.txt','rb') as obj1:
# ret = json.loads(obj1.read())
# print ret,type(ret)
with open('to_disk.txt','rb') as obj1:
ret = json.load(obj1)
print ret,type(ret)#<type 'dict'> #pikle
# with open('to_disk.txt','w') as obj:
# ret = pickle.dump(dic,obj)
# print type(ret) #<type 'NoneType'>
pickle为python特有且处理的数据类型较json多
4.time
时间相关的操作,时间有三种表示方式:
- · 时间戳 1970年1月1日之后的秒,即:time.time()
- · 格式化的字符串 2014-11-11 11:11, 即:time.strftime('%Y-%m-%d')
- 结构化时间 元组包含了:年、日、星期等... time.struct_time 即:time.localtime()
时间戳 >>> time.time() 1453536914.157 >>> time.mktime(time.localtime()) 1453536984.0 格式化的字符串 >>> time.strftime('%Y-%m-%d',time.localtime()) '2016-01-23' >>> time.asctime() 'Sat Jan 23 16:36:36 2016' >>> time.ctime(time.time()) 'Sat Jan 23 16:37:27 2016' 结构化时间 >>> time.strptime('2014-11-11', '%Y-%m-%d') time.struct_time(tm_year=2014, tm_mon=11, tm_mday=11, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=315, tm_isdst=-1) print time.gmtime() #可加时间戳参数 print time.localtime() #可加时间戳参数 >>> t= time.localtime() >>> t time.struct_time(tm_year=2016, tm_mon=1, tm_mday=23, tm_hour=16, tm_min=54, tm_sec=42, tm_wday=5, tm_yday=23, tm_isdst=0) >>> t.tm_yday #通过类似索引获取 23
5.random
random模块包含返回随机数的函数,模拟或用于任何产生随机输出的程序
random() 返回0<n<=1之间的随机实数
uniform(a,b) 返回随机实数n ,a<=n<b
shuffle(seq[,random]) 传入可变序列,对元素进行随机移位
sample(seq,n) 从序列中选择n个随机且独立的元素
模拟投色子机制:
from random import randrange
num = input('how many dice?')
sides = input('how many sides per die?')
n = 0
for i in range(num):n += randrange(sides) + 1
print 'The total points is :',n
输出:
how many dice?4
how many sides per die?6
The total points is : 17
以上为学习要点笔记记录,更多参考武sir博客
进击python第4篇:初探模块的更多相关文章
- Python 学习 第九篇:模块
模块是把程序代码和数据封装的Python文件,也就是说,每一个以扩展名py结尾的Python源代码文件都是一个模块.每一个模块文件就是一个独立的命名空间,用于封装顶层变量名:在一个模块文件的顶层定义的 ...
- 进击python第三篇:基础
基础拾遗 序列解包 例: >>>x,y,z=1,2,3 >>>print x,y,z 1 2 3 交换变量也是没问题 >>>x,y=y,x > ...
- Python 线程高级篇 threading 模块的使用
创建一个tread实例,给他传一个函数 #!/usr/bin/python import threading from time import * loops =[4,2] def loop (nlo ...
- 洗礼灵魂,修炼python(54)--爬虫篇—urllib2模块
urllib2 1.简介 urllib2模块定义的函数和类用来获取URL(主要是HTTP的),他提供一些复杂的接口用于处理: 基本认证,重定向,Cookies等.urllib2和urllib差不多,不 ...
- Python学习【第十一篇】模块(1)
模块 模块让你能够有逻辑地组织你的Python代码段. 把相关的代码分配到一个模块里能让你的代码更好用,更易懂. 模块也是Python对象,具有随机的名字属性用来绑定或引用. 简单地说,模块就是一个保 ...
- python之路第五篇之模块和加密算法(进阶篇:续)
模块 Python中,如果要引用一些内置的函数,该怎么处理呢?在Python中有一个概念叫做模块(module) 简单地说,模块就是一个保存了Python代码的文件. 模块分类: 1)内置模块 2)自 ...
- Python之路(第十七篇)logging模块
一.logging模块 (一).日志相关概念 日志是一种可以追踪某些软件运行时所发生事件的方法.软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情.一个事件可以用一个可包含可选变 ...
- Python之路(第二十篇) subprocess模块
一.subprocess模块 subprocess英文意思:子进程 那什么是进程呢? (一)关于进程的相关理论基础知识 进程是对正在运行程序的一个抽象,进程的概念起源于操作系统,是操作系统最核心的概念 ...
- 第三篇 Python关于mysql的API--pymysql模块, mysql事务
python关于mysql的API--pymysql模块 pymysql是Python中操作MySQL的模块,其使用方法和py2的MySQLdb几乎相同. 模块安装 pip install pymys ...
随机推荐
- HDU 6076 Security Check DP递推优化
Security Check Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others) ...
- SAM4E单片机之旅——3、LED闪烁之定时器中断
让一个LED灯闪烁不过瘾,我们应该让这块开发板完成一点更高难度的任务:比如让两个LED灯闪烁. …… 当然了,以我们的现在使用的空循环技术,还是可以实现这点的.但是这样显得略为低端.所以我们使用一个高 ...
- EasyDarwin开源流媒体服务器如何实现按需推送直播的
--本文转自EasyDarwin开源团队成员邵帅的博客:http://blog.csdn.net/ss00_2012/article/details/51441753 我们使用EasyDarwin的推 ...
- cgic 中文文档
CGIC英文文档地址:https://boutell.com/cgic/ cgic是用c写cgi程序的一个很小的库,所以英文文档也很少,为了便于日后复习翻看,心血来潮,翻译了一遍. 1. 什么是cgi ...
- 事件 MotionEvent
点击和长按可能会同时发生,需要在长按的回调函数中返回true,就不会产生点击.谁处理事件谁就是消费者 如果view组件不处理事件,最后会让ontouchevent处理,它是备胎 <LinearL ...
- 我所认为的KVC和KVO
引子: 为什么要写这个,只是突然一个念头闪现,说一下本人目前理解.KVC: Key-value coding,它是一种使用字符串标识符,间接访问对象属性的机制.但是关就这一 ...
- Redis雪崩效应以及解决方案
缓存雪崩产生的原因 缓存雪崩通俗简单的理解就是:由于原有缓存失效(或者数据未加载到缓存中),新缓存未到期间(缓存正常从Redis中获取,如下图)所有原本应该访问缓存的请求都去查询数据库了,而对数据库C ...
- linux下syslog使用说明
转自:http://blog.chinaunix.net/uid-25120309-id-3359929.html syslog 系统日志应用 1) 概述 syslog是Linux系统默 ...
- c和c++字符串分割
1.c++版本,第一个参数为待分割的字符串 , 第二个参数为分割字符串 std::vector<std::string> split(const std::string& s, c ...
- win10 下安装linux子系统
一.开发人员选项 打开控制面板->程序与功能->启用或关闭windows功能 勾选 [适用于linux的windows子系统] 选项 打开win10设置 找到更新与安全 启动开 ...