08-python中的包与模块

你已经了解了如何在你的程序中经过定义一次函数工做来重用代码。那么若是你 想在你所编写的别的程序中重用一些函数的话,应该怎么办?正如你可能想象到的那样,答 案是模块(Modules)python

编写模块有不少种方法,其中最简单的一种即是建立一个包含函数与变量、以 .py 为后缀的 文件程序员

from..import 语句

import 语句容许在当前运行的程序文件中使用模块中的代码。经过将函数存储在独立的文件中,可隐藏程序代码的细节,将重点放在程序的高层逻辑上。这还能让你在众多不一样的程序中重用函数。函数

将函数存储在独立文件中后,可与其余程 序员共享这些文件而不是整个程序。知道如何导入函数还能让你使用其余程序员编写的函数库。工具

案例学习

from math import sqrt
print("16开平方是", sqrt(16))

输出测试

16开平方是 4.0

模块的 name

每一个模块都有一个名称,而模块中的语句能够找到它们所处的模块的名称。这对于肯定模块 是独立运行的仍是被导入进来运行的这一特定目的来讲大为有用。正如先前所提到的,当模 块第一次被导入时,它所包含的代码将被执行。spa

咱们能够经过这一特性来使模块以不一样的方 式运行,这取决于它是为本身所用仍是从其它模块中导入而来。这能够经过使用模块的 name 属性来实现。code

案例 (保存为 module_using_name.py ):blog

if __name__ == '__main__':
    print('这个程序是本身运行的')
else:
    print('我是从其余模块导入的')

输出:get

这个程序是本身运行的

在python控制台导入

import module_using_name
​
# 输出:我是从其余模块导入的

它是如何工做的

每个 Python 模块都定义了它的 name 属性。若是它与 main 属性相同则表明这一 模块是由用户独立运行的,所以咱们即可以采起适当的行动。

编写你本身的模块

编写你本身的模块很简单,这其实就是你一直在作的事情!这是由于每个 Python 程序同时 也是一个模块。你只须要保证它以 .py 为扩展名便可。下面的案例会做出清晰的解释。

案例(保存为 mymodule.py ):

def say_hi():
    print('Hi, mymodule 正在说话.')
__version__ = '0.1'

要记住该模块应该放置于与其它咱们即将导入这一模块的程序相同的目录下,

另外一个模块(保存为 mymodule_demo.py ):

import mymodule 
mymodule.say_hi() 
print('Version', mymodule.__version__)

输出

Hi, mymodule 正在说话.

它是如何工做的

你会注意到咱们使用相同的点符来访问模块中的成员。Python 很好地重用了其中的符号,这 充满了“Pythonic”式的气息,这使得咱们能够没必要学习新的方式来完成一样的事情。

下面是一个使用 from...import 语法的范本(保存为 mymodule_demo2.py ):

from mymodule import say_hi, __version__
say_hi()
print('Version', __version__)

mymodule_demo2.py 所输出的内容与 mymodule_demo.py 所输出的内容是同样的

在这里须要注意的是,若是导入到 mymodule 中的模块里已经存在了 version 这一名 称,那将产生冲突。

这多是由于每一个模块一般都会使用这一名称来声明它们各自的版本 号。所以,咱们大都推荐最好去使用 import 语句,尽管这会使你的程序变得稍微长一些。

你还可使用:

from mymodule import

这将导入诸如 say_hi 等全部公共名称,但不会导入 version 名称,由于后者以双下划 线开头。

警告:要记住你应该避免使用 from mymodule import * 这种形式

Python 的一大指导原则是“明了赛过晦涩”这样的话你都不知道函数是在哪定义,哪儿导入的

如今,你必须开始遵照用以组织你的程序的层次结构。变量一般位于函数内部,函数与全局 变量一般位于模块内部。

若是你但愿组织起这些模块的话,应该怎么办?这即是包 (Packages)应当登场的时刻。

包是指一个包含模块与一个特殊的 __init__.py 文件的文件夹,后者向 Python 代表这一文 件夹是特别的,由于其包含了 Python 模块。

| |
| ---- | ---- |
| 具有必定功能的工具 | 包含不少工具、功能强大的工具箱|
| python中的模块| python中的包(模块包/程序包)|

考虑一个在 package_my 目录下的 demo1.py、demo2.py、__init__.py 文件,test.py 为测试调用包的代码,目录结构以下:

test.py

package_my/demo1.py

def runfun1():
   print "我在demo1.py"

package_my/demo2.py

def runfun2():
   print "我在demo2.py"

package_my/__init__.py

if __name__ == '__main__':
    print '做为主程序运行'
else:
    print 'package_my  初始化'

test.py

from package_my.demo1 import runfun1
from package_my.demo2 import runfun2

结果

package_my  初始化

总结

如同函数是程序中的可重用部分那般,模块是一种可重用的程序。包是用以组织模块的另外一 种层次结构。Python 所附带的标准库就是这样一组有关包与模块

咱们已经了解了如何使用这些模块并建立你本身的模块。

image

IT入门 感谢关注

练习地址:www.520mg.com/it

相关文章
相关标签/搜索