Python基础模块使用与学习


一、模块基础

1.1 模块包含什么

假设你听说有一个名为copy的标准模块

>>> import copy
  1. 使用dir

要查明模块包含哪些东西,可使用函数dir,它列出对象的所有属性(对于模块,它列出所有的函数、类、变量等)
在这些名称中,有几个以下划线打头。根据约定,这意味着它们并非供外部使用。


>>> [n for n in dir(copy) if not n.startswith('_')]
['Error', 'PyStringMap', 'copy', 'deepcopy', 'dispatch_table', 'error', 'name', 't', 'weakref']
# 结果包含dir(copy)返回的不以下划线打头的名称,这比完整清单要好懂些。
  1. 变量__all__

这个变量包含一个列表,它与前面使用列表推导创建的列表类似,但是在模块内部设置的

>>> copy.__all__
['Error', 'copy', 'deepcopy']
  1. 这个__all__列表是怎么来的呢?
  • 它是在模块copy中像下面这样设置的(这些代码是直接从copy.py复制而来的):
    __all__ = ["Error", "copy", "deepcopy"]
  1. 为何要提供它呢?
  • 旨在定义模块的公有接口。具体地说,它告诉解释器从这个模块导入所有的名称意味着什么:
    from copy import * : 将只能得到变量__all__中列出的4个函数
    要导入PyStringMap,必须显式地:导入copy并使用copy.PyStringMap;或者使用from copy import PyStringMap。
  • 总结

编写模块时,像这样设置__all__也很有用。因为模块可能包含大量其他程序不需要的变量、函数和类,比较周全的做法是将它们过滤掉。如果不设置__all__,则会在以import *方式导入时,导入所有不以下划线打头的全局名称

1.2 使用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.
	
'''
上述帮助信息指出,函数copy只接受一个参数x,且执行的是浅复制
文档字符串就是在函数开头编写的字符串,用于对函数进行说明,而函数的属性__doc__可能包
含这个字符串
'''

1.3 文档和源代码

文档是有关模块信息的自然来源。例如,你可能想知道range的参数是什么?在这种情况下,与其在Python图书或标准Python文档中查找对range的描述,不如直接检查这个函数。

>>> print(range.__doc__)
range(stop) -> range object
range(start, stop[, step]) -> range object

Return an object that produces a sequence of integers from start (inclusive)
to stop (exclusive) by step. range(i, j) produces i, i+1, i+2, ..., j-1.
start defaults to 0, and stop is omitted! range(4) produces 0, 1, 2, 3.
These are exactly the valid indices for a list of 4 elements.
When step is given, it specifies the increment (or decrement).

假设你要阅读标准模块copy的代码,可以在什么地方找到呢?一种办法是像解释器那样通sys.path来查找,但更快捷的方式是查看模块的特性__file__

>>> print(copy.__file__)
C:\Python35\lib\copy.py

二、常见模块

2.1 sys使用

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

在这里插入图片描述
在这里插入图片描述

  • 代码示例
# 反转并打印命令行参数
# reverseargs.py
import sys
args = sys.argv[1:]
args.reverse()
print(' '.join(args))

# 运行:
$ python reverseargs.py this is a test
test a is this

2.2 os

模块os让你能够访问多个操作系统服务。
os及其子模块os.path还包含多个查看、创建和删除目录及文件的函数,以及一些操作路径的函数(例如,os.path.split和os.path.join让你在大多数情况下都可忽略os.pathsep)。

在这里插入图片描述

例如,要访问环境变量PYTHONPATH,可使用表达式os.environ['PYTHONPATH']。这个映射也可用于修改环境变量,但并非所有的平台都支持这样做。
函数os.system用于运行外部程序。还有其他用于执行外部程序的函数,如execv和popen。前者退出Python解释器,并将控制权交给被执行的程序,而后者创建一个到程序的连接(这个连接类似于文件)。

看看启动Web浏览器的问题。命令system可用于执行任何外部程序,这在UNIX等环境中很有用,因为你可从命令行执行程序(或命令)来列出目录的内容、发送电子邮件等。它还可用于启动图形用户界面程序,如Web浏览器。

# UNIX中,可像下面这样做(这里定/usr/bin/firefox处有浏览器):
os.system('/usr/bin/firefox')

# 在Windows中,可以这样做(同样,这里指定的是你安装浏览器的路径):
os.system(r'C:\"Program Files (x86)"\"Mozilla Firefox"\firefox.exe')
'''
请注意,这里用引号将Program Files和Mozilla Firefox括起来了
另一个函数更适合用于完成这项任务,它就是Windows特有的函数os.startfile。
os.startfile(r'C:\Program Files (x86)\Mozilla Firefox\firefox.exe')

请注意,在Windows中,使用os.system或os.startfile启动外部程序后,当前Python程序将继续运行;
而在UNIX中,当前Python程序将等待命令os.system结束。
'''

在这里插入图片描述

2.3 fileinput

模块fileinput让你能够轻松地迭代一系列文本文件中的所有行。

在这里插入图片描述

2.4 集合、堆和双端队列⭐⭐

  1. 集合

以前,集合是由模块sets中的Set类实现的;新的版本中,集合是由内置类set实现的,意味着你可直接创建集合,而无需导入模块sets。

>>> set(range(10))
{
   0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

可使用序列(或其他可迭代对象)来创建集合,也可使用花括号显式地指定。请注意,不能仅使用花括号来创建空集合,因为这将创建一个空字典。

>>> type({
   })
<class 'dict'>

必须在不提供任何参数的情况下调用set。集合主要用于成员资格检查,因此将忽略重复的元素:

>>> {
   0, 1, 2, 3, 0, 1, 2, 3, 4, 5}
{
   0, 1, 2, 3, 4, 5}

集合中元素的排列顺序是不确定的


                
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胜天半月子

打不打商的无所谓,能帮到你就好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值