python模块的子模块
⑴ 那些python中的模块
Python的解释环境是很好用,但是如果我们需要编写一个大型的程序的时候,解释环境就完全不够用了。这个时候我们需要将python程序保存在一个文件里。通常这个文件是以.py结尾的。
对于大型的应用程序来说,一个文件可能是不够的,这个时候我们需要在文件中引用其他的文件,这样文件就叫做模块。
模块是一个包含Python定义和语句的文件。文件名就是模块名后跟文件后缀 .py 。在模块内部,模块名可以通过全局变量 __name__ 获得。
还是之前的斐波拉赫数列的例子,我们在fibo.py文件中存放了函数的实现:
编写完毕之后,我们可以在Python的解释环境中导入它:
然后直接使用即可:
常用的函数,我们可以将其赋值给一个变量:
或者,我们在导入的时候,直接给这个模块起个名字:
或者导入模块中的函数:
每个模块都有它自己的私有符号表,该表用作模块中定义的所有函数的全局符号表。因此,模块的作者可以在模块内使用全局变量,而不必担心与用户的全局变量发生意外冲突。
前面我们提到了可以使用import来导入一个模块,并且 __name__ 中保存的是模块的名字。
和java中的main方法一样,如果我们想要在模块中进行一些测试工作,有没有类似java中main方法的写法呢?
先看一个例子:
在模块中,我们需要进行一个判断 __name__ 是不是被赋值为 "__main__"。
我们这样来执行这个模块:
以脚本执行的情况下,模块的 __name__ 属性会被赋值为 __main__ , 这也是例子中为什么要这样写的原因。
看下执行效果:
如果是以模块导入的话,那么将不会被执行:
使用import导入模块的时候,解释器首先会去找该名字的内置模块,如果没找到的话,解释器会从 sys.path变量给出的目录列表里寻找。
sys.path的初始目录包括:
要想查看模块中定义的内容,可以使用dir函数。
上面的例子列出了当前模块中定义的内容,包括变量,模块,函数等。
我们可以给dir加上参数,来获取特定模块的内容:
java中有package的概念,用来隔离程序代码。同样的在Python中也有包。
我们看一个Python中包的例子:
上面我们定义了4个包,分别是sound,sound.formats, sound.effects, sound.filters。
__init__.py 可以是一个空文件,也可以执行包的初始化代码或设置 __all__ 变量。
当导入的时候, python就会在 sys.path 路径中搜索该包。
包的导入有很多种方式,我们可以导入单个模块:
但是这样导入之后,使用的时候必须加载全名:
如果不想加载全名,可以这样导入:
那么就可以这样使用了:
还可以直接导入模块中的方法:
然后这样使用:
如果一个包里面的子包比较多,我们可能会希望使用 * 来一次性导入:
那么如何去控制到底会导入effects的哪一个子包呢?
我们可以在 __init__.py 中定义一个名叫 __all__ 的列表,在这个列表中列出将要导出的子包名,如下所示:
这样from sound.effects import * 将导入 sound 包的三个命名子模块。
如果没有定义 __all__,from sound.effects import * 语句 不会 从包 sound.effects 中导入所有子模块到当前命名空间;它只会导入包 sound.effects。
Import 可以指定相对路径,我们使用 . 来表示当前包, 使用 .. 来表示父包。
如下所示:
⑵ python stub是什么意思
J2EE里面的stub是这样说的:为屏蔽客户调用远程主机上的对象,必须提供某种方式来模拟本地对象,这种本地对象称为存根(stub),存根负责接收本地方法调用,并将它们委派给各自的具体实现对象。
stub替代子模块(某些特定功能模块)的模拟函数或模拟类。
在分布式对象中代表着客户端对象,承担着通信的职责。在VC++环境中做测试的模拟函数,并可以用stub指令指定DOS程序。
由于stub就是用来代替所测的子模块,故而它不能为空
####在分布式计算环境中:
存根代表参与分布式对象的通信的客户端侧对象。
存根担任分布式对象通信的角色。
存根作为一个网关,客户端对象和服务器端对象,通过它进行路由所有传出请求。存根包装客户端对象的功能,并通过添加网络逻辑保证了可靠的客户端和服务器之间的通信通道。可以写上去的存根,手动或自动生成,这取决于所选择的通信协议。
的存根是负责:
向服务器发起通信骨架
翻译从调用者调用对象
编组的参数
通知该呼叫应该被调用的骨架
在网络上传递参数的骨架
从骨架解组的响应
通知该呼叫是完整的骨架
##模拟函数的使用 (Stub Function):
通常,此种暂时用来代替某些功能的模拟函数称为 Stub,举例而言,假如我们有一个装置可以侦测温度,但是该装置的硬体尚未制作完成,此时,我们可以利用类似范例 1,9的函数,暂时先传回一个温度值,以让后续的程式可以顺利的进行测试,此种函数就称为 Stub。
范例 1.0 用来取得温度的 Stub 函数
void Thermometer() {
#ifdef _SIMULATOR _
return 28;
#else
#endif
}
利用 stub 函数,可以让未完成的系统得以进行测试,其展现的行为类似于目标系统。如此,程式开发人员可以在硬体未完成之前就进行程式撰写与测试工作,因此,能有效加快系统的开发时程,以使专案提早完成。
⑶ python数据分析需要哪些库
1、Numpy
Numpy是Python科学计算的基础包,它提供了很多功能:快速高效的多维数组对象ndarray、用于对数组执行元素级计算以及直接对数组执行数学运算的函数、用于读写硬盘上基于数组的数据集的工具、线性代数运算、傅里叶变换以及随机数生成等。NumPy在数据分析方面还有另外一个主要作用,即作为在算法和库之间传递数据的容器。
2、Pandas
Pandas提供了快速便捷处理结构化数据的大量数据结构和函数。自从2010年出现以来,它助使Python成为强大而高效的数据分析环境。其中用得最多的Pandas对象是DataFrame,它是一个面向列的二维表结构,另一个是Series,一个一维的标签化数组对象。Pandas兼具Numpy高性能的数组计算功能以及电子表格和关系型数据库灵活的数据处理功能。还提供了复杂精细的索引功能,能更加便捷地完成重塑、切片和切块、聚合以及选取数据子集等操作。
3、matplotlib
matplotlib是最流行的用于绘制图表和其他二维数据可视化的Python库。它最初由John
D.Hunter(JDH)创建,目前由一个庞大的开发团队维护。它非常适合创建出版物上用的图表。虽然还有其他的Python可视化库,但matplotlib应用最为广泛。
4、SciPy
SciPy是一组专门解决科学计算中各种标准问题域的包的集合,它与Numpy结合使用,便形成了一个相当完备和成熟的计算平台,可以处理多种传统的科学计算问题。
5、scikit-learn
2010年诞生以来,scikit-learn成为了Python通用机器学习工具包。它的子模块包括:分类、回归、聚类、降维、选型、预处理等。与pandas、statsmodels和IPython一起,scikit-learn对于Python成为高效数据科学编程语言起到了关键作用。
6、statsmodels
statsmodels是一个统计分析包,起源于斯坦福大学统计学教授,他设计了多种流行于R语言的回归分析模型。Skipper Seabold和Josef
Perktold在2010年正式创建了statsmodels项目,随后汇聚了大量的使用者和贡献者。与scikit-learn比较,statsmodels包含经典统计学和经济计量学的算法。
⑷ Python的模块和库的区别是哪些
python模块是:
自我包含并且有组织的代码片段为模块。
表现形式为:写的代码保存为文件。这个文件就是一个模块。test.py 其中文件名test为模块名字。
python包是:
包是一个有层次的文件目录结构,它定义了由n个模块或n个子包组成的python应用程序执行环境。
通俗一点:包是一个包含__init__.py 文件的目录,该目录下一定得有这个__init__.py文件和其它模块或子包。
python库是:
参考其它编程语言的说法,就是指python中的完成一定功能的代码集合,供用户使用的代码组合。在python中是包和模块的形式。
一般按照API的惯例来设计库。