Python学习笔记10:开箱即用

开箱即用

模块

模块就是程序

编写自己的模块

任何Python程序都可作为模块导入。

# 一个简单的模块
# hello.py 
print("Hello, world!")

告诉解释器去哪里查找这个模块

# 当前会话有效
>>> import sys, pprint
>>> sys.path.append('C:\\Users\\15735\\desktop\\')
>>> pprint.pprint(sys.path)
['',
 'D:\\Program Files\\Python\\Lib\\idlelib',
 'D:\\Program Files\\Python\\python310.zip',
 'D:\\Program Files\\Python\\DLLs',
 'D:\\Program Files\\Python\\lib',
 'D:\\Program Files\\Python',
 'D:\\Program Files\\Python\\lib\\site-packages',
 'C:\\Users\\15735\\desktop\\']

导入这个模块

>>> import hello
Hello, world!

PS:

当你导入模块时,可能发现其所在目录中除源代码文件外,还新建了一个名为__pycache__的子目录,这个目录包含处理后的文件,Python能够更高效地处理它们。

为组织模块,可将其编组为包(package)。包其实就是另一种模块,但有趣的是它们可包含其他模块。模块存储在扩展名为.py的文件中,而包则是一个目录。要被Python视为包,目录必须包含文件__init__.py。

一种简单的包布局

文件/目录描述
~/python/PYTHONPATH中的目录
~/python/drawing/包目录(包drawing)
~/python/drawing/__init__.py包代码(模块drawing)
~/python/drawing/colors.py模块colors
~/python/drawing/shapes.py模块shapes

可以像下面这样使用:

import drawing # (1) 导入drawing包

import drawing.colors # (2) 导入drawing包中的模块colors

from drawing import shapes # (3) 导入模块shapes

  • 执行第1条语句后,便可使用目录drawing中文件__init__.py的内容,但不能使用模块shapes和colors的内容。
  • 执行第2条语句后,便可使用模块colors,但只能通过全限定名drawing.colors来使用。
  • 执行第3条语句后,便可使用简化名(即shapes)来使用模块shapes。
  1. 探索模块
# 1. 导入
>>> import copy

# 2. 查明模块包含哪些东西
>>> [n for n in dir(copy) if not n.startswith('_')] 
['Error', 'PyStringMap', 'copy', 'deepcopy', 'dispatch_table', 'error', 'name', 't', 'weakref']

# 3. 直接咨询这个模块来获得包含的内容,即共有接口
# 它告诉解释器从这个模块导入所有的名称意味着什么 from copy import *
>>> copy.__all__ 
['Error', 'copy', 'deepcopy']
 
# 4. 使用help
>>> help(copy)
>>> 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.

>>> print(copy.copy.__doc__)
Shallow copy operation on arbitrary Python objects.

    See the module's __doc__ string for more info.

# 5. 查看源代码
>>> print(copy.__file__) 
C:\Python35\lib\copy.py 
找到了!你可在代码编辑

标准库的一些模块

  1. sys
函数/变量描述
argv命令行参数,包括脚本名
exit([arg])退出当前程序,可通过可选参数指定返回值或错误消息
modules一个字典,将模块名映射到加载的模块
path一个列表,包含要在其中查找模块的目录的名称
platform一个平台标识符,如sunos5或win32
stdin标准输入流——一个类似于文件的对象
stdout标准输出流——一个类似于文件的对象
stderr标准错误流——一个类似于文件的对象
  1. os
函数/变量描述
environ包含环境变量的映射
system(command)在子shell中执行操作系统命令
sep路径中使用的分隔符
pathsep分隔不同路径的分隔符
linesep行分隔符(‘\n’、‘\r’或’\r\n’)
urandom(n)返回n个字节的强加密随机数据
  1. fileinput
函数描述
input([files[, inplace[, backup]]])帮助迭代多个输入流中的行
filename()返回当前文件的名称
lineno()返回(累计的)当前行号
filelineno()返回在当前文件中的行号
isfirstline()检查当前行是否是文件中的第一行
isstdin()检查最后一行是否来自sys.stdin
nextfile()关闭当前文件并移到下一个文件
close()关闭序列

在python脚本中添加行号

# numberlines.py 
import fileinput 
for line in fileinput.input(inplace=True): 
    line = line.rstrip() 
    num = fileinput.lineno() 
    print('{:<50} # {:2d}'.format(line, num))

$ python numberlines.py numberlines.py

添加行号后的行号添加程序

# numberlines.py                                # 1 
                                                # 2 
import fileinput                                # 3 
                                                # 4 
for line in fileinput.input(inplace=True):      # 5 
 line = line.rstrip()                           # 6 
 num = fileinput.lineno()                       # 7 
 print('{:<50} # {:2d}'.format(line, num))      # 8

小结

模块:模块基本上是一个子程序,主要作用是定义函数、类和变量等。模块包含测试代码时,应将这些代码放在一条检查name == 'main’的if语句中。如果模块位于环境变量PYTHONPATH包含的目录中,就可直接导入它;要导入存储在文件foo.py中的模块,可使用语句import foo。

探索模块:在交互式解释器中导入模块后,就可以众多不同的方式对其进行探索,其中包括使用dir、查看变量__all__以及使用函数help。文档和源代码也是获取信息和洞见的极佳来源。

标准库:Python自带多个模块,统称为标准库。本章介绍了其中的几个。

  • sys:这个模块让你能够访问多个与Python解释器关系紧密的变量和函数。
  • os:这个模块让你能够访问多个与操作系统关系紧密的变量和函数。
  • fileinput:这个模块让你能够轻松地迭代多个文件或流的内容行。
  • sets、heapq和deque:这三个模块提供了三种很有用的数据结构。内置类型set也实现
    了集合。
  • time:这个模块让你能够获取当前时间、操作时间和日期以及设置它们的格式。
  • random:这个模块包含用于生成随机数,从序列中随机地选择元素,以及打乱列表中元
    素的函数。
  • shelve:这个模块用于创建永久性映射,其内容存储在使用给定文件名的数据库中。
  • re:支持正则表达式的模块。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值