Python程序由一个一个的模块构成,模块在Python中是很重要的概念。Python模块以.py结尾,包含了Python对象定义和Python语句。模块除了能定义函数、类和变量,还能按一定的逻辑组织代码,让代码更好用、更易懂。此外,项目中的其他模块可以引用该模块,从而使用该模块里的函数等功能。
Python中一个文件就是一个模块,模块由代码、函数和类组成。也就是说,创建一个Python文件module1.py,也就创建了一个名为“module1”的模块。
在Python中模块分为三种。
sys、json、time模块等。
自定义模块是自己写的模块,如2.1.3小节中创建的module1.py、module2.py。自定义模块对某段逻辑或某些函数进行封装后可供其他函数调用。
这部分模块可以通过pip install进行安装,有开源的代码。
自定义模块的命名一定不能和系统内置的模块重名,否则将不能再导入系统的内置模块。例如,自定义了一个sys.py模块后,就无法使用系统的sys模块。
Python新手一定要打下坚实的基础,才能完成后续的开发。前面介绍了什么是模块,那么如何导入模块或包呢?
用import语句可实现模块的导入,具体使用方法如下。
我们以导入Python内置函数math为例,求某个负数的绝对值,代码如下:
上述代码运行的结果为“1”。
定义一个模块名为“mytest.py”,“mytest.py”中定义一个函数print_mydef,源代码如下:
接下来新建一个Python文件test.py,调用mytest.py, test.py源代码如下:
上述代码运行的结果为“我在这里哦!”
import和from……import的区别如下。
import和from……import都是导入模块的方法,使用“import”关键词是将整个模块引入,前面提到的系统内置模块导入、自定义模块及第三方开源模块导入都是使用的import;使用from……import则是引入指定的部分到当前的命名空间中来,如2.1.3节的案例应用。
Python中的模块可以看成是一个比类更大的对象,模块的属性便是变量名,通常被其他的文件或程序使用。一个模块在被导入后,在一个模块的顶层定义的所有变量都在被导入时成为了被导入模块的属性。
来看一个例子,创建一个模块scriptpro.py,代码如下:
自定义属性可以通过2种方法获得这个模块的title属性。
通过import方法导入scriptpro.py模块,然后通过scriptpro.title获得scriptpro模块的title属性,这里的“.”代表了object.attribute的语法,可以从任何的object中取出其任意属性。实现代码如下:
上述代码的运行结果为“热爱生活,拥抱未来!”
可以通过from……import……这样的语句从模块中获得模块的属性。实现代码如下:
上述代码的运行结果为“热爱生活,拥抱未来!”
对于任何一个Python文件来说,当Python解释器运行一个.py文件,会自动将一些内容加载到内置的属性中。
我们可以通过dir()方法获取该模块所有的显式或隐式的属性。
可看到隐式的属性有['Person'、'__annotations__'、'__builtins__'、'__cached__'、'__doc__'、'__file__'、'__loader__'、'__name__'、'__package__'、'__spec__','os','var1']。
打印每个内置属性。
显示结果为:
各内置属性的含义和功能如下。
__name__:该属性代表当前模块的名称,每个.py文件默认的属性,如果当前模块是主程序,值为“__main__”,如果不是主程序,值为模块名。这个属性经常用来区分主程序和作为被导入模块的程序。
__annotations__:该属性对于模块文件来说,没有开放给用户使用,但对于函数来说,这个方法用来记录参数的类型和返回值。
__builtins__:该属性代表内置模块builtins,即所有的内建函数、内置类型、内置异常等。在Python执行一个.py文件时,会将内置模块赋值给这个属性。如果不是主程序,那么这个属性是一个builtins模块所有方法的字典。
__cached__:缓存文件。如果是主程序,那么该属性为None,其他模块的该属性指向该模块的.pyc字节文件,这样在.py文件不发生修改的情况下可以减少编译的时间,更快地加载上下文环境。
__doc__:模块的说明文档。.py文件初始化时,将文件开始的说明字符串赋值给这个属性。
__file__:该属性代表文件的绝对路径。任何一个模块使用这个属性就可获得本模块的绝对路径,但是该属性只在windows环境下可用,在Linux环境下不可用。
__loader__:由加载器在导入的模块上设置的属性。访问它时将会返回加载器对象本身。
__package__:. py文件所属包。
__name__、__doc__、__file__、__package__是可以直接使用的内置属性,其他的内置属性一般不允许直接使用。