`
onlynima
  • 浏览: 5303 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

从零开始学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*i2*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夏令时     01-1

>>time.asctime()

>>

将当前时间格式化为字符串

常用方法如下:

asctime([t])   将时间元素转换为字符串

localtime([s])  将秒数转为日期元组,本地时间为准

mktime(t)  将时间元组转换为本地时间

Sleep(s)  休眠s

strptime(string[,fromat])  将字符串解析为时间元组

time()   当前时间

10.random

   os模块中的随机性更高

   常用方法:

   random()  返回0n1之间的随机整数n

   getrandbits(n)  以长整型形式返回n个随机位----->比较重要

   uniform(a,b)  返回随机数nnab之间,不包括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的所有小写字母组合,但是每次只能匹配一个字符

   在字符集中,对于点号,星号不需要转义,需要转义的有脱字符(^)在字符集的开头,右括号( ] )和横线(-)也需要转义

选择符和子模式:

   选择符:匹配:hellohehe 匹配模式可以写成:hello|hehe

   子模式:  匹配:hellohehe 匹配模式可以写成: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

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) 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics