从零开始学Python
第八章:充电时刻
1.模块
可以将模块导入,作为程序来运行
import sys
sys.append(‘路径’)
import hello
hello.py
输出:hello,world
>>hello=reload(hello)
就能在不是第一次导入的时候执行hello程序(p3中已经去掉了这个功能)
另外在写模块的时候,可以在模块内部定义函数,这就像调用其他模块中的函数一样,用模块名.函数名
2.包
包就是一个文件夹,不过可以包含多个模块,
from 包名 import 模块名
3.模块的内容
使用dir函数
>>[n for n in dir(copy) if not n.startwidth(‘_’)]
>>[‘Error’,...’__all__’]
__all__变量
在上例中all变量是模块自己内部定义的,保存了模块的公共接口,这些不是我们在调用模块的时候需要的,都放在all变量中,在编写模块的时候可以这样做。
help函数
>>help(copy.copy)
会打印出一系列关于copy.copy的信息,所有的信息都是从模块中的文档字符串中提取出来的
4.文档
5.源代码
查看copy的源代码,一种方案是检查sys.path属性,然后自己找,另外一种方法用file属性
>>print(copy.__file__)
输出copy.py或者copy.pyc文件目录,就可以找到了
6.集合
>>set(range(10))
输出:set([0,1,2,3,4,5,6,7,8,9])
集合(set)的顺序和字典一样是随意的,集合有一些标准的运算:
>>a=set([1,2,3])
>>b=set([2,3,4])
>>a.union(b) #a|b
输出:set([1,2,3,4])
>>c=a&b
>>c.issubset(a) #判断子集
输出:True
>>c<=a
输出:True
>>a.intersection(b) #a&b
输出:set([2,3])
>>a.different(b) #a-b
输出:set([1])
>>a.symmetric_difference(b) #a^b
输出:set([1,4])
>>a.copy() is a
输出:False
以上就是代表了集合的运算方法,更多的方法在此不再赘述。
集合本身只能包含不可变的值,集合可以改变,集合的集合非常有用
>>a.add(frozenset(b))
>>a.add(b)
TypeError:。。。
frozenset构造了一个集合的副本,是一个不可变的集合。
7.堆
是一种数据结构,是优先队列,能够以任意顺序增加对象,并能在任何时间找到最小的元素,较为有效率
在Python中没有独立的堆类型,只有通过模块调用函数来实现一些堆的相关操作,模块为heapq,方法如下:
heappush(heap,x):将x放入堆
heappop(heap):将堆中最小的元素弹出
heapify(heap):将heap中的属性强制应用到任意一个列表
heapreplace(heap,x):将堆中最小的元素弹出,将x放入堆
nlargest(n,iter):返回iter中第n大的元素
nsmallest(n,iter):返回iter中第n小的元素
>>from heapq import *
>>heap=[] #定义一个空的堆
>>heappush(heap,1)
>>heap
输出:[1]
堆的元素的排列规律:i位置的元素要比2*i和2*i+1的元素小---->堆属性
8.双端队列
或者称为deque,通过可迭代对象创建(比如集合)
>>from collections import deque
>>q=deque(range(5))
>>q.append(5)
>>q.appendleft(6)
>>q
输出:deque([6,0,1,2,3,4,5])
>>q.pop
输出:5
>>q.popleft()
输出:6
>>q.rotate(-1) #左移
>>q
输出:deque([1,2,3,4,0])
>>q.rorate(1) #右移
>>q
输出:deque([0,1,2,3,4])
双端队列还有extend方法等等。
9.time模块
time模块包含以下功能,获得当前时间,操作时间和日期,从字符串读取时间,格式化时间为字符串
time日期元组的字段含义:
0 年
1月
2日
3时
4分
5秒
6周
7儒厉日
8夏令时 0、1、-1
>>time.asctime()
>>
将当前时间格式化为字符串
常用方法如下:
asctime([t]) 将时间元素转换为字符串
localtime([s]) 将秒数转为日期元组,本地时间为准
mktime(t) 将时间元组转换为本地时间
Sleep(s) 休眠s秒
strptime(string[,fromat]) 将字符串解析为时间元组
time() 当前时间
10.random
os模块中的随机性更高
常用方法:
random() 返回0≤n<1之间的随机整数n
getrandbits(n) 以长整型形式返回n个随机位----->比较重要
uniform(a,b) 返回随机数n,n在a和b之间,不包括b
randrange([start],stop,[step]) 返回range(start,stop,step)中的随机数
choice(s) 从序列s中返回任意元素
shuffle(seq[,random]) 原地指定序列seq
sample(seq,n) 从序列seq中随机选取n个不重复的元素
11.shelve
实现简单的存储
>>shelve.open(‘text’)#会自动生成text.dat文件
存储成功之后会生成text.dir文件
12.re
此模块包含对正则表达式的支持
通配符 . :
点号( . )可以匹配任何字符串,不包括换行符
对特殊字符进行转义:
例如:想要匹配 zq.name
用 zq\\.name 用\转义\,再转义.。
字符集:
用括号将字符串创建成字符集,字符集可以匹配它所包括的任意字符[a-z]可以匹配a-z的所有小写字母组合,但是每次只能匹配一个字符
在字符集中,对于点号,星号不需要转义,需要转义的有脱字符(^)在字符集的开头,右括号( ] )和横线(-)也需要转义
选择符和子模式:
选择符:匹配:hello和hehe 匹配模式可以写成:hello|hehe
子模式: 匹配:hello和hehe 匹配模式可以写成:h(ello|ehe)
可选项和重复子模式:
可选项:在子模式后面加上问号就是可选项,表示子模式出现一次或者不出现
重复子模式:(paaatt)*:允许模式重复0次或多次
(paaatt)+:允许模式重复1次或多次
(paaatt){m,n}:允许模式重复m~n次
重复运算时贪婪的,它会尽可能多的进行匹配,如果需要非贪婪版本:
则在重复运算后加?就可以了,例如:
>>em=r’\*\*(.+?)\*\*/’ #匹配了从开始*到结束*的所有内容
字符串的开始和结尾:
开头一边用脱字符( ^ ),结尾一般用( $ )
re模块匹配字符串的重要内容:
compile(p[,flags]) 根据包含正则表达式的字符串创建模式对象
search(p,string[,flags]) 在字符串中寻找模式
match(p,string[,flags]) 在字符串的开始出匹配模式
split(p,string[,maxsplit=0]) 根据字符串的匹配模式分割字符串
findall(p,string) 列出字符串中模式的所有匹配项
sub(pat,repl,string[,count=0]) 将字符串中所有pat的匹配项用repl替换
escape(string) 将字符串中所有特殊正则表达式字符转义
13.匹配对象和组
组:放置在圆括号内的子模式(只能用0~99个)
“there (was a(hehe)) i”
0 there was a hehe i
1 was a hehe
2 hehe
re模块匹配对象的重要方法
group([group1,..]) 获取给定组的匹配项
start([group]) 返回给定组的匹配项的开始位置
end([group]) 返回给定组的匹配项的结束位置
span([group]) 返回给定组的开始和结束位置
可以在正则表达式中使用re.VERBOSE标志,加上注释
>>ep=re.compile(r’’’ ‘’’,re.VERBOSE)
- python自己动手从零开始搭建FTP服务器2 FTP初步框架
- 从零开始人工智能(一)——飞速看尽Python基础
- [Python]从零开始学python——Day07 面向对象
- 从零开始用Python学习MachineLearning
- Python爬虫项目班 从零开始实现爬虫系统 百度网盘下载 百度云
- 从零开始学Python(五):常用函数语句和运算符
- 从零开始学Python学习笔记---之--pandas数据框(2)
- 新手学习python-从零开始学习
- 从零开始学Python-day1
- 阿里云centos7从零开始搭建python环境,到使用flask+nginx+gunicorn部署。(二)搭建虚拟环境
- 阿里云centos7从零开始搭建python环境,到使用flask+nginx+gunicorn部署。(五)Nginx的安装及配置自动启动
- 用Python从零开始创建区块链
- 从零开始写Python爬虫 --- 1.9 爬虫实践:悦音台mv排行榜与反爬虫技术
- 发现一个从零开始学习python的良心资源
- 《从零开始学Python网络爬虫》CH6
- 从零开始学Python(六):函数,模块和类的使用
- python从零开始写爬虫(2)
- 【从零开始】Python3 学习笔记
- python爬虫---从零开始(六)Selenium库
- 从零开始学python网络爬虫