模块的操作

来源:互联网 发布:ubuntu装入u盘 编辑:程序博客网 时间:2024/06/03 18:44

声明:以下部分内容摘自《python基础教程》

我们以copy模块举例。
首先我们导入copy模块:

>>> import copy

1 我们想看copy模块中有哪些函数、类、变量等我们想要使用的东西,使用dir()函数:

>>> dir(copy)['Error', 'PyStringMap', '_EmptyClass', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_copy_dispatch', '_copy_immutable', '_copy_inst', '_copy_with_constructor', '_copy_with_copy_method', '_deepcopy_atomic', '_deepcopy_dict', '_deepcopy_dispatch', '_deepcopy_inst', '_deepcopy_list', '_deepcopy_method', '_deepcopy_tuple', '_keep_alive', '_reconstruct', '_test', 'copy', 'deepcopy', 'dispatch_table', 'error', 'name', 't', 'weakref']

出现了一大串名字,有的以下划线开头,有的不是。我们可以使用列表推导式过滤掉以下划线开头的:

>>> [n for n in dir(copy) if not n.startswith('_')]['Error', 'PyStringMap', 'copy', 'deepcopy', 'dispatch_table', 'error', 'name', 't', 'weakref']

可以看到有copy函数和deepcopy函数,分别为浅拷贝和深拷贝。

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()函数需要传一个参数来使用,而且是浅复制。还可以看看文档字符串__doc __string:

>>> print copy.copy.__doc__Shallow copy operation on arbitrary Python objects.    See the module's __doc__ string for more info.

这些信息还不够,想看源码的话只要找到源码的路径即可:

>>> print copy.__file__/usr/local/python27/lib/python2.7/copy.pyc

可以看到如果文件名以.pyc结尾,只要查看对应的以.py结尾的文件即可。

3 _ _all__变量的意义

>>> copy.__all__['Error', 'copy', 'deepcopy']

可以看到返回一个copy模块内部设定好的列表,它定义了模块的公有接口,更准确的说,它告诉解释器从模块导入所有名字代表什么含义,因此如果你使用如下代码:

from copy import *

那么你就能使用 all变量中的四个函数,而其它的就被无情地过滤掉了。可以看出这个变量很有意义,当然,如果有的模块没有定义它,那么如果用import *来导入的话将会导入所有不以下划线开头的全局名称。

0 0