8.模块

8. 模块

       假如我们已经定义好了我们所需要用的函数,如果我们在其他的程序中需要使用这个函数怎么办?重新写一遍?复制粘贴?哦,神啊,饶了我吧。Python为我们提供了一种更方便的方法,使用模块。

那么什么是模块呢?其实所谓的模块只不过就是一个python的文件。我们只需要将所需的文件导入到所需的文件中就行了。好吧,说的倒是挺容易的,那么我们怎么导入文件呢?这时我们只需要使用import语句就行了。import 文件名,这就是import最简单最基本的用法。例如我们在叫Demo.py的文件中定义了一个叫display的函数,我们需要在一个叫test.py的文件中使用display这个函数,只需要在这个文件的开头加上这样一句话:import Demo,然后在使用时加上”模块的名字.”作为前缀就行了。

Demo.py:

#!/usr/bin/python
Def display(num):
       printnum

test.py:

#!/usr/bin/python
import Demo
Demo.display(2)

显示:

2

       诶?怎么多出了一个.pyc的文件?导入一个模块相对来说是一个比较费时的事情,为了使导入模块更快一些,Python使用了一些技巧。其中一种方法就是创建后缀名为.pyc的文件——字节编译的文件 。当我们讲文件作为模块导入时,模块会自动被编译为字节编译文件。字节编译的文件与Python变换程序的中间状态有关。字节编译文件之所以快得多是因为一部分导入模块所需的处理已经完成了。另外,这些字节编译的文件也是与平台无关的。所以,现在你知道了那些.pyc文件事实上是什么了。

       既然我们可以使用我们自己编写的文件作为模块(也叫自定义模块)导入文件来方便我们的编程,那么python是否有为我们提供模块呢?为了方便我们编程,为了标准化,python像其他语言一样,为我们提供了所谓的“标准库”,在这些标准库中为我们提供了许多已经定义好的函数、类和变量。这有为我们带来了一个问题,如果我们使用次数很多,那么不是要不停的编写”模块名.”,这可不是一件轻松的差事。为了避免这种情况,python为我们提供了另一种import语句:from…import…。例如,在python为我们提供的模块中有一个叫做os的模块,在这个模块中有一个system函数,这个函数可是让我使用系统自带的批处理或shell脚本。我们以这个为例:

#!/usr/bin/python
form os import system
 system('echo this is a test!')

显示:

this is a test

不过,在《a byte of python》一书中说,最好是使用import,避免使用from…import…,这样不仅可以增加程序的可读性,同时还可以避免命名冲突。

每个模块都有一个名称,在模块中可以通过语句来找出模块的名称。这在一个场合特别有用——就如前面所提到的,当一个模块被第一次输入的时候,这个模块的主块将被运行。假如我们只想在程序本身被使用的时候运行主块,而在它被别的模块输入的时候不运行主块,我们该怎么做呢?这可以通过模块的__name__属性完成。

#!/usr/bin/python
if __name__ == '__main__':

       print 'This program is being run byitself.'
 else:

       print 'I am being imported form anothermodule.'


正如你所想的,’__main__’代表的就是这个模块自己,因此,当直接运行此程序是会输出:This program is being run by itself.。当这个程序被当作模块被导入的时候,会显示:I am being imported from another module.。       现在,我们已经知道了如何定义模块,如何使用模块,那么我们怎么能够知道模块中包含了什么哪些内容呢?难道我们需要找到源代码然后打开这个文件一个个的找吗?很庆幸,我们并不需要这么做,因为python为我们提供了一个函数——dir函数,当你把你想要知道的模块名当作参数传递给这个函数时,这个函数会为我们找出模块中定义好了的名称列表,并显示出来。有一点需要注意一下,我们不给 dir函数传递参数而使用它——默认地,它返回当前模块的属性列表。注意,导入的模块同样是列表的一部分。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值