首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

第8篇,模块

2024-12-21 来源:花图问答

模块

模块是程序中一些重用函数的集合。

创建模块有两种方式,

一、创建包含函数和变量的.py文件

如下,我们创建MyFun.py文件

def testFunc():
    print('模块导入测试')

i = 10086

__version__ = '0.1'

接着我们在ModulesTest.py文件中通过import导入MyFun.py,然后就可以通过MyFunc.testFunc()MyFunc.i的方式,访问和使用它里面的变量或函数,

import  MyFunc

MyFunc.testFunc()
print(MyFunc.i + 1)

当然,我们也可以通过from...import...的方式来导入模块,不用通过MyFunc.testFunc()MyFunc.i的方式使用其中的变量和函数,

from MyFunc import testFunc,i
# from MyFunc import *
testFunc();
print(i + 1)

说明

from MyFunc import *这种方式不会导入__version__

不过,不建议使用这种方式,因为变量名或者函数名很有可能会和需要导入py文件里面的变量名或者函数名重复。

二、使用撰写Python解释器本身的本地语言来编写模块

我们可以使用C/C++语言来编写Python模块,在编译之后就可以通过标准的Python解释器在代码中使用它们。

这一部分,在后面学习之后再补充。

模块的__name__

通过模块的名称__name__,我们可以判断某模块是独立运行的还是被导入进来的。具体如下,

if __name__ == '__main__':
    print('模块是被导入进来的')
else:
    print('模块是独立运行的')

说明

每个Python模块都定义了它的__name__属性,如果它与__main__属性相同,则说明该模块由用户独立运行的、可以做一些其它操作,否则就是导入进来的。

dir( )函数

  • dir( )函数能够返回对象所定义的名称的列表,如果对象是模块时,则会返回所定义的函数、类与变量。
  • dir( )传入参数时,返回的是传入参数对象的名称列表,没有参数时,返回当前模块的名称列表。

请看下面的练习
DirTest.py

import  MyFunc

print('MyFunc中的名称列表:',dir(MyFunc))

del  MyFunc.i
print('MyFunc中的名称列表:',dir(MyFunc))

print('当前模块中的名称:',dir())

控制台输出

MyFunc中的名称列表: ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '__version__', 'i', 'testFunc']
MyFunc中的名称列表: ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '__version__', 'testFunc']
当前模块中的名称: ['MyFunc', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']

Process finished with exit code 0

其中,我们通过 del 名称来删除一个名称,删除之后,就不能再进行访问。
此外dir( )函数能够对任何对象工作,eg.dir(str)可以访问str(String,字符串)类的属性。虽然vars( )函数也能返回这些值的属性,但它不是针对所有类都能正常工作的。

  • 变量通常位于函数内部,函数和全局变量通常位于模块内部, 用来组织起这些模块。
  • 包是指一个包含模块与一个特殊的__init__.py文件的文件夹,后者向Python表明这一文件夹是特殊的,因为其包含了Python模块。
  • 包是一种能够方便地分层组织模块的方式。

如下,创建一个名为world的包,其中包含asiaafrica等其他子包,同时这些子包下面都包含indiamadagascar等模块,
具体的文件夹的结构如下

WX20171213-142237@2x.png

总结

函数是程序中的可重用部分,模块是可重用的程序,包用以组织模块的另一种层次结构。

显示全文