Python3入门(八)模块

模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用python 标准库的方法

一、import语句

使用 Python 源文件,只需在另一个源文件里执行 import 语句,语法如下
import module1[, module2[,... moduleN]
当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。搜索路径是一个解释器会先进行搜索的所有目录的列表,以下为一个demo

  • test.py文件,用于其他文件导入
def test():
    print("hello  import")
  • test2.py文件,引入test.py
import test

test.test()

输出:
hello import
一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。当我们使用import语句的时候,Python解释器是怎样找到对应的文件的呢?这就涉及到Python的搜索路径,搜索路径是由一系列目录名组成的,Python解释器就依次从这些目录中去寻找所引入的模块。这看起来很像环境变量,事实上,也可以通过定义环境变量的方式来确定搜索路径。搜索路径是在Python编译或安装的时候确定的,安装新的库应该也会修改。搜索路径被存储在sys模块中的path变量

二、from...import语句

Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中

from modname import name1[, name2[, ... nameN]]

例如对上面导入的test.py进行改变,增加一个方法

def print1():
    print("hello  import")


def print2():
    print("no hello")

进行导入:

from test import print1

print1()

只导入print1方法

三、from...import* 语句

把一个模块的所有内容全都导入到当前的命名空间也是可行的

from test import*

print1()
print2()

四、__name__属性

一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行:

  • 定义一个被导入类:test.py
def print1():
    print("hello  import")


def print2():
    print("no hello")


if __name__ == '__main__':
    print("主程序在运行")
else:
    print("其他在运行")
  • 定义一个模块test2.py导入test.py
from test import*

print1()

运行test.py时会输出:
主程序在运行
运行test2.py输出:

其他在运行
hello  import

四、dir()方法

内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回

import test

print(dir(test))

返回:
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'print1', 'print2']

五、包

包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。比如一个模块的名称是 A.B, 那么他表示一个包中的子模块A和B 。就好像使用模块的时候,你不用担心不同模块之间的全局变量相互影响一样,采用点模块名称这种形式也不用担心不同库之间的模块重名的情况,
在导入一个包的时候,Python 会根据 sys.path 中的目录来寻找这个包中包含的子目录。目录只有包含一个叫做 __init__.py 的文件才会被认作是一个包,主要是为了避免一些滥俗的名字(比如叫做 string)不小心的影响搜索路径中的有效模块

如果想导入一个包中的所有模块,可以使用form package import *

本文到此结束了,如果发现有问题可以在下方评论留言

上一篇:在OpenCASCADE使用包SortTools中的排序功能


下一篇:Python3入门(七)函数