Python 学习笔记一之模块探究学习


探究模块的技能极有价值,因为作为Python程序猿,在职业生涯中可能会遇到很多有用的模块,而又无法集中时间全面系统的学习各种模块。

独立地探究模块还能让我们在网上找到用的模块时,可以很快理解它们,从而让编程成为一种享受。

探究模块最直接的方式就是在Python解释器中研究他们。

下面以SciPycopy 模块为例进行介绍


模块中有什么

导入模块

>>> import scipy as sp

如果没有引发错误,说明存在。

使用dir

>>> [n for n in dir(sp) if n.startswith('_')]
Out[3]: 
['__SCIPY_SETUP__',
 '__all__',
 '__builtins__',
 '__cached__',
 '__config__',
 '__doc__',
 '__file__',
 '__loader__',
 '__name__',
 '__numpy_version__',
 '__package__',
 '__path__',
 '__spec__',
 '__version__']

找出包含dir(sp) 中所有不以下划线开头的名字的列表

__all__变量

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

__all__变量内容如下

>>> copy.__all__
Out[3]: ['Error', 'copy', 'deepcopy']

如果你使用如下代码

>>> from copy import *

就只能导入__all__变量中的4个函数,要导入PyStringMap,必须显示实现。
在编写模块时,像设置__all__这样的技术是相当有用的。因为模块中可能会有一大堆其他程序中不需要或不想要的变量、函数和类。__all__会“客气地”将它们过滤。


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.
>>> print(copy.copy.__doc__)
Shallow copy operation on arbitrary Python objects.

    See the module's __doc__ string for more info.

使用help与直接检查文档字符串相比,好处在于会获得更多信息。


使用源代码

阅读源代码,事实上是学习Python最好的方式,除了自己编写代码外。

检查模块的__file__属性来找到源码的路径。

>>> print(copy.__file__)
E:Anaconda3libcopy.py

 

评论关闭