1 模块

  使用import 语句从外部导入模块信息,python提供了很大内置模块。当你导入模块时,你会发现其所在目录中,除源代码文件外,还新建了一个名为__pycache__的子目录(在较旧的Python版本中,是扩展名为.pyc 的文件)。这个目录包含处理后的文件,Python能够更高效地处理它们。以后再导入这个模块时,如果.py文件未发生变化,Python将导入处理后的文件,否则将重新生成处理后的文件。删除目录__pycache__不会有任何害处,因为必要时会自动创建它。

2 包

  为组织模块,可将其编组为(package)。包其实就是另一种模块,但它可以包含其他模块。模块存储在扩展名为 .py 的文件中,而包则是一个目录。要被Python视为包,目录必须包含文件__init__.py。如果像普通模块一样导入包,文件__init__.py的内容就将是包的内容。

  如:包com.xxx.package_name下包含了person.py、bird.py等,并且包含了__init__.py,__init__.py中的内容为:import person              import bird,辣么要在其他py文件中使用该包的所有内容,只需使用from com.xxx.package_name import *       即可。

3 获取模块信息

  3.1 获取模块包含的信息

    3.1.1 dir

    要查明模块包含哪些东西,可以使用函数dir,它列出对象的所有属性(对于模块,它列出所有的函数、类、变量等)。如:dir(copy)

    3.1.2 获取模块位置

    使用模块的特性__file__获取模块的绝对地址。

4 常用模块

  本小结只列举了一些常用模块的一些常用功能,如果小伙伴们想知道完整的模块方法,请参考自己Python安装后的目录中的module Docs,如下图:

  4.1 sys

  模块sys让你能够访问与Python解释器紧密相关的变量和函数。

  • 变量 sys.argv 包含传递给Python解释器的参数,其中包括脚本名。
  • 函数 sys.exit 退出当前程序。
  • 映射 sys.modules 将模块名映射到模块(仅限于当前已导入的模块)。
  • 变量 sys.path 一个列表,包含要在其中查找模块的目录的名称。
  • 变量 sys.platform 一个字符串,返回运行解释器的“平台”名。这可能是表示操作系统的名称(如win32),也可能是表示其他平台类型(如java虚拟机)。

  4.2 os

  模块os能够让你访问多个操作系统服务。

  • 映射 os.envirom 包含本地系统的环境变量。
  • 函数 os.system(command) 用于在子shell中执行操作系统命令。
  • 变量 os.sep 用于路径名中的分隔符。如在windos中,文件路径使用 \\ 。UNIX系统中,文件路径使用 / 等。
  • 变量 os.pathsep 用于组合多条路径,就像操作系统中的环境变量一样。pathsep用于分隔不同的路径名:如在window中为 ; ,为在UNIX中为 : 。
  • 变量 os.linesep 用于文本中的行分隔符('\n' , '\r' 或 '\r\n')
  • 函数 os.urandom(n) 使用随系统而异的强加密随机数据。

  4.3 fileinput

  模块fileinput让你能够对文件进行操作。

  • 函数 fileinput.input([fies[, inplace[, backup]]]) 帮助迭代多个输入流中的行,返回一个可以在for循环中进行迭代的对象。参数inplace=True时,可以对文件进行处理操作。参数backup用于给原始文件创建的备份文件指定扩展名。
  • 函数 fileinput.filename() 返回当前文件的名称。
  • 函数 fileinput.lineno() 返回(累计的)当前行号。
  • 函数 fileinput.filelineno() 返回在当前文件的行号。
  • 函数 fileinput.isfirstline() 检查当前行是否是文件中的第一行。
  • 函数 fileinput.isstdin() 检查最后一行是否来自 sys.stdin。
  • 函数 fileinput.nextfile() 关闭当前文件并移到下一个文件。
  • 函数 fileinput.close() 关闭整个文件链并结束迭代。

  4.4 集合、堆和双端队列

    4.4.1 集合

    很久以前集合是由模块sets中的Set类实现的。虽然在既有代码中可能遇到Set实例,但除非要像后兼容,否则没必要使用它。在较新的版本中,集合是由内置类set实现的,无需导入模块sets。如:set1 = set(rang(10))。

    注意:集合是可变的,因此不能用作字典中的键。但是frozenset集合类型是不可变的,能够用于键。

    4.4.2 堆

    堆,是一种优先队列,能够以任意顺序添加对象,并随时找出(并删除)最小的元素。相比于列表的方法min,效率高很多。

    实际上,Python没有独立的堆类型,而只有一个包含一些堆操作的模块。这个模块名为heapq(其中q表示队列),它包含6个函数(如下列所示),前4个与堆操作直接相关。必须使用列表来表示堆对象本身。

          函数              描述

          heappush(heap, x)        将x压入堆中

          heappop(heap)           从堆中弹出最小的元素

          heapify(heap)           让列表具备推特征

          heapraplace(heap, x)       弹出最小元素,并将x压入堆中

          nlargest(n, iter)          返回iter中n个最大的元素

          nsmallest(n, iter)          返回iter中n个最小的元素

    堆特征:位置 i 出的元素总是大于位置 i // 2 处的元素( 反过来说就是小于位置 i * 2 和 i * 2 + 1处的元素 )。

    函数heappop弹出最小的元素总是位于索引0处,并确保剩余元素中最小的那个位于索引0处(保持堆特征)。

    4.4.3 双端队列

    在需要按添加元素的顺序进行删除时,双端队列很有用。模块collections中,包含类型deque已经其他几个集合(collection)类型。

    与集合(set)一样,双端队列也是可迭代对象创建的,它包含很多有用的方法。

    from collections import deque

    q = deque(range(10))    #创建双端队列

    q.append(11)         #在队列末尾添加

    q.appendleft(12)      #在队列left上添加

    q.appendright(13)      #在队列right上添加

    q.popleft()          #获取并删除left顶端的元素

    q.popright()        #获取并删除right顶端的元素

    q.rotate(-1)        #逆时针旋转1位

    q.rotate(1)         #顺时针旋转1位

  4.5 time

  模块time包含用于获取当前时间、操作时间和日期、从字符串中读取日期、将日期格式化为字符串的函数。日期可表示为实数(从‘新纪元’1月1日0时起过去的秒数。不同平台新纪元可能不同。),也可表示为包含9个整数的元祖。如元祖(2019, 3, 18, 12, 12, 45, 0, 76, 0)表示2019年3月18号12时12分45秒  星期一  2019年的第76天(不考虑夏令时)。

  上述元祖这些都表示年、月(1~12)、日(1~31)、时(0~23)、分(0~59)、秒(0~61)、星期(0~6)、一年的第多少天、夏令时(0,1或 -1)。

  模块time中一些常用的函数如下:

  • 函数 time.asctime([tuple]) 将当前时间(时间元祖)转换为字符串。
  • 函数 time.localtime([secs]) 将秒数转换为表示当地时间的日期元祖。
  • 函数 time.gmtime([secs]) 将秒数转换为国际标准时间。
  • 函数 time.mktime(tuple) 将时间元祖转换为当地时间。
  • 函数 time.sleep(secs) 休眠secs秒。
  • 函数 time.strptime(string[, format]) 将字符串转为时间元祖,并能进行格式化。
  • 函数 time.time() 当前的国际标准时间,以从新纪元开始的秒数表示。

  4.6 random

  模块random包含生成伪随机数的函数。为啥叫伪随机数呢?是因为这些函数生成的数字好像是完全随机的,但它们背后的系统是可预测的。如果你想真正的随机,应考虑使用前面os模块中的函数urandom。模块random中的SystemRandom类基于的功能与urandom类似,可提供接近于真正随机的数据。

  模块random中一些常用函数如下:

  • 函数 random.random() 返回一个 0~1(含)的随机实数。
  • 函数 random.getrandbits(n) 以长整数方式返回 n 个随机的二进制位(长整数表示为二进制后,位数等于n)。
  • 函数 random.uniform(a, b) 返回一个 a~b (含)的随机(均匀分布)实数。
  • 函数 random.choice(seq) 从序列seq中随机的选择一个元素。
  • 函数 random.randrange([start], stop, [step]) 从rang(start, stop, step)中随机的选择一个数。step表示步长。
  • 函数 random.shuffle(seq[, random]) 就地打乱可变序列seq,并确保每种可能的排序顺序出现的概率相同。
  • 函数 random.sample(seq, n) 从序列seq中随机的选择 n 个序列值不同的元素。

  4.7 shelve

  在实际工作中,如果只需要简单的对文件存取,可以使用模块shelve。对于模块shelve,最重要的函数就是open(filename, flag, protocol, writeback)。返回一个Shelf对象,供你用来存储数据。

  使用shelve,如果想保证从Shelf对象读取或赋值的所有数据结构都将保存到内存(缓存)中,并等到你关闭Shelf对象时才将它们写入磁盘,可以将writeback参数设置为True。在这种情况下,你必须保证在处理完毕后将Shelf对象关闭。

  参数:flag 默认为‘c’,如果数据文件不存在,就创建,允许读写;可以是: ‘r’: 只读;’w’: 可读写; ‘n’: 每次调用open()都重新创建一个空的文件,可读写。

  4.8 re

  模块re为正则表达式。关于正则表达式的概率大家可以自行去了解一下,只能说,这个东西很强大,并且高大上。

    4.8.1 通配符

    句点( . )表示通配符,只能匹配一个字符。

    4.8.2 对特殊字符进行转义

    使用两个反斜杠( \\ )对特殊字符进行转义。

    4.8.3 字符集

    使用 [str] 或 [^str] 来表示字符集匹配,前者表示匹配字符集中的字符,后者表示匹配除字符集中的字符。

    4.8.4 二选一和子模式

    使用管道字符( | ) 表示二选一,如'python|java'。子模式,使用圆括号()。如'(python|java)',注意,当个字符也可称为子模式。

    4.8.5 可选模式和重复模式

    通过在子模式后面加上问好( ? ),可将其指定为可选的,即可包含可不包含,如'(java)?(python)?'。

    重复模式,(pattern)*:pattern可重复 0/1/n 次;(pattern)+:pattern可重复 1/n 次;(pattern){m, n}:pattern可重复 m~n 次。

    4.8.6 字符串的开头和末尾

    指定字符串开头使用脱字符( ^ ),如'^a'。指定字符串结尾使用美元符号( $ ),如'a$'。

    4.8.7 模块re中一些常用函数

      函数                  描述

      compile(pattern[, flags])           根据包含正则表达式的字符串创建模式对象,能提高匹配效率

      search(pattern, string[, flags])       在字符串中查找模式,如果存在,返回MatchObject对象,不存在返回None

      match(pattern, string[, flags])           在字符串开头匹配模式,如果存在,返回MatchObject对象,不存在返回None

      split(pattern, string[, maxsplit=0])                    根据模式来分隔字符串,maxsplit表示最多分隔多少次

      findall(pattern, string)             返回一个列表,其中包含字符串中所有与模式匹配的子串

      sub(pat, replace, string[, count=0])        将字符串中与模式pat匹配的子串都替换为replace

      escape(string)                对字符串中所有的正则表达式特殊字符都进行转义

      re.escape是一个工具函数,用于对字符串中所有可能被视为正则表达式运算符的字符进行转义。使用这个函数的情况有:字符串很长,其中包含大量特殊字符,而你不想输入大量的反斜杠进行转义;你从用户那里获取了一个字符串,想将其用于正则表达式中。

    4.8.8 匹配对象和编组

    在模块re中,查找与模式匹配的子串的函数都在找到时返回MatchObject对象。这些对象包含于模式匹配的子串的信息,还包含模式的哪部分与子串的哪部分匹配的信息。这些子串部分称为编组(group)。

    编组就是放在圆括号内的子模式,他们是根据左边的括号数编号的,其中 0 编组指的是整个模式。如下面模式中:

    'There (a (aa) cc (dd))'

    包含如下编组:

    0  There a aa cc dd

    1  a aa cc dd

    2  aa

    3  dd

    通常,编组包含诸如通配符和重复运算符等特殊字符,因此你可能想知道与给定编组匹配的内容。如模式:

    r'www\.(.+)\.com$'

    编组 0 包含整个字符串,而编组1包含www. 和 .com之间的内容。

    re中匹配对象的重要方法有:

    group([group1,...]):获取与给定模式(编组)匹配的子串。

    start([group]):返回与给定编组匹配的子串的起始位置。

    end([group]):返回与给定编组匹配的子串的终止位置。(与切片一样,不包含终止位置)

    span([group]):返回与给定编组匹配的子串的起始和终止位置。

    注意:出了整个模式(编组0)外,最多还可以有99个编组,编号为1~99.

    在实际开发中,正则表达式时很难理解的,我们可以调用模块re中的函数是使用标志VERBOSE。这样能够让你在模式中添加空白(空白、制表符、换行符等)。如下

      pattern1 = re.compile(r'''

      ...\*    #其实标志

      ...(     #...

      ''', re.VERBOSE)

  这里列举了一些比较常用的模块,还有很多有趣的模块,比如datetime、cmd、logging等,如果想了解更多,可以自行去查看API文档。

python学习笔记(九)、模块的更多相关文章

  1. Python学习笔记九

    Python学习笔记之九 为什么要有操作系统 管理硬件,提供接口. 管理调度进程,并且将多个进程对硬件的竞争变得有序. 操作系统发展史 第一代计算机:真空管和穿孔卡片 没有操作系统,所有的程序设计直接 ...

  2. Python学习笔记之模块与包

    一.模块 1.模块的概念 模块这一概念很大程度上是为了解决代码的可重用性而出现的,其实这一概念并没有多复杂,简单来说不过是一个后缀为 .py 的 Python 文件而已 例如,我在某个工作中经常需要打 ...

  3. Python学习笔记—itertools模块

    这篇是看wklken的<Python进阶-Itertools模块小结> 学习itertools模块的学习笔记 在看itertools中各函数的源代码时,刚开始还比较轻松,但后面看起来就比较 ...

  4. python学习笔记_week5_模块

    模块 一.定义: 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能), 本质就是.py结尾的python文件(文件名:test.py,对应模块名:test) 包:用来从逻辑上 ...

  5. python学习笔记(八)-模块

    大型python程序以模块和包的形式组织.python标准库中包含大量的模块.一个python文件就是一个模块.1.标准模块 python自带的,不需要你安装的2.第三方模块 需要安装,别人提供的. ...

  6. Python学习笔记-常用模块

    1.python模块 如果你退出 Python 解释器并重新进入,你做的任何定义(变量和方法)都会丢失.因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个文本编辑器会更好,并以那个文件替代作 ...

  7. Python学习笔记1—模块

    模块的使用 引用模块的两种形式 形式一: import module_name 形式二: from module1 import module11   (module11是module的子模块) 例: ...

  8. Python学习笔记2——模块的发布

    1.为模块nester创建文件夹nester,其中包含:nester.py(模块文件): """这是"nester.py"模块,提供了一个名为prin ...

  9. python学习笔记十——模块与函数

    第五章 模块与函数 5.1 python程序的结构 函数+类->模块              模块+模块->包                 函数+类+模块+包=Python pyth ...

  10. Python学习笔记14—模块

    在python中所有的模块都被加入到了sys.path中,用下面的方法可以看见模块的位置. >>> import sys >>> import pprint > ...

随机推荐

  1. &amp;

    在 xml 中,不能直接使用 '&' 表示 '&',要转译为 '&'  (转译序列个字符不能有空格,区分大小写,以';'结束,不要丢了分号哦 ;    amp;不是" ...

  2. 嘿嘿嘿,开始自学mysql

    开始学习mysql了,作为非计算机专业学生,必须需要一个地方来给自己的知识进行一些记录和总结. 一SQL语句 数据库是不认识java语言的,但是我们同样要与数据库交互,这时需要使用到数据库认识的语言S ...

  3. Kafka基础

    简介 #概念:消息中间件(消息系统)      //消息系统分类:         点对点 消息队列(peer-to-peer)         发布/订阅 消息队列 消费者在消费时,是通过pull ...

  4. Redis Rpop 命令

    Redis Rpop 命令用于移除并返回列表的最后一个元素. 语法 redis Rpop 命令基本语法如下: redis 127.0.0.1:6379> RPOP KEY_NAME 可用版本 & ...

  5. Spring IOC知识点一网打尽!

    前言 只有光头才能变强 回顾前面: 给女朋友讲解什么是代理模式 包装模式就是这么简单啦 单例模式你会几种写法? 工厂模式理解了没有? 在刷Spring书籍的时候花了点时间去学习了单例模式和工厂模式,总 ...

  6. Java Script 读书笔记 (三) 函数

    1. 函数作用域 在函数内部定义的变量,外部无法读取,称为"局部变量"(local variable). 变量v在函数内部定义,所以是一个局部变量,函数之外就无法读取. 函数内部定 ...

  7. storage.go

    package storage import (     "fmt"     "os" ) const DEFAULT_STORAGE_ENGINE = &qu ...

  8. protocol_v2.go

    {         return protocol.NewFatalClientErr(nil, "E_INVALID",             fmt.Sprintf(&quo ...

  9. Evensgn 剪树枝 树规

    f[x][0]表示与其父边相连的连通块内没有黑苹果的方案数, f[x][1]则表示有黑苹果, 如果父边被切断,相当于没有黑苹果 初始化时,假设切掉父边,f[x][0]=1,f[x][1]=0; 递归回 ...

  10. ModBus功能码速记

    一.0x01~0x04: 这四个功能码都是"读"操作,可分两组记忆,0x01和0x02是一组(bool类型),0x03和0x04是一组(寄存器类型):两组属性差不多如下: 1.都是 ...