(八)Python:模块与包

      在Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的jar包很类似。比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块。
以下是一个导入模块使用的例子:

import random#引入random模块
print(random.randint(0,5))

这里写图片描述

import

引入Python的模块我们需要使用import关键字。
语法:import module1,[module2],[module3]...
并且命令要放在脚本的顶部。
一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。

我们如果想使用导入模块中的某一方法我们需要带上模块名:

import random

print(randint(0,5))         #不加模块名,出错
print(random.randint(2,5))  #正确

搜索路径:

当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。搜索路径是由一系列目录名组成的,Python解释器就依次从这些目录中去寻找所引入的模块。搜索路径被存储在sys模块中的path变量

这里写图片描述
注意第一个字符串是空串,这代表当前目录。如果我在脚本中运行就可以看见具体的目录。

from…import

使用import我们可以导入整个模块,同时Python提供了from…import让我妈可以导入某一模块中具体的某个部分,在使用此方法时我们就不需要带上模块名了。

语法:from module improt part,[part2],[part3],...

from random import randint

print(randint(0,5))

如果我们使用from module import *可以导入module中的所有。


深入模块

__name__属性

创建模块module1.py:

def add(a,b):
    return a+b

#测试
print(add(1,2))

导入模块并测试:

import module1

print(module1.add(5,5))

这里写图片描述

由于一个模块被引入时它的主程序会运行一次,所以出现了模块中的测试结果3。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。

修改module1.py:

def add(a,b):
    return a+b

#测试
if __name__=="__main__":
    print(add(1,2))

这里写图片描述

每个模块都有一个__name__属性,当其值是’__main__’时,表明该模块自身在运行,否则是被引入。__name__ 与 __main__ 底下是双下划线。

dir() 函数

dir() 函数可以找到模块内定义的所有名称。以一个字符串列表的形式返回。
这里写图片描述

Python中的包与JAVA中的包类似,为什么说类似呢?因为Python的包也是目录,不过,要想成为包则在目录下要有一个__init__.py文件。

在Python2中必须有__init__.py文件,而在Python3中则不需要但是即使有也不会错,所以我们同意都加上这个文件。

      当我们使用from package import *时会将package中的所有模块都导入,但是,如果__init__.py中存在一个叫做__all__的列表变量,那么在使用 from package import * 的时候就只把这个列表中的所有名字作为包内容导入。所以作为包的作者,可别忘了在更新包之后保证 __all__ 也更新了啊!

猜你喜欢

转载自blog.csdn.net/qq_25343557/article/details/80030709
今日推荐