python-包和模块

什么是模块?

模块(moduls):python中的每一个文件都可以称之为模块.文件中封装这一些功能相似的类,函数,变量等等.可以被其他的文件反复调用的文件叫做模块.

什么是包?

包(package):python中包就是包含着大量模块的文件夹,并且包中有一个"__init__.py"的文件,声明这个文件夹是一个python pakcage.可以将大量功能相关的python模块包含起来统一管理,同样也可以被其他模块通过import关键字引入重复使用封装的模块和代码!

包和模块的复用

import 和from ... import ...  

1.import 方法

  • 引入模块

基础语法:

import 模块名

使用模块的数据时直接可以模块.数据名 即可

模块.变量

模块.函数

模块.类型

  • 引入包

基础语法

import 包名.模块名

ps:因为包中包含多种模块,所以在引入是要指定引入的包中模块名

使用时可以直接如上方式

包名.模块名.变量

包名.模块名.函数

包名.模块名.类型

          注:import 方式引入模块和包是会自动从当前文件夹中,系统环境变量PYTHONPATH中,以及系统的sys.path路径中查询是否存在该名称的模块/包

如果不存在,则会报错:no mudels named 'xxxx'

2.from ... import  ...

from . import 模块名                                     #从当前路径下引入一个模块

from .. import 模块名                                    #从当前文件夹的父级文件引入模块

form 模块名 import 变量,类型,函数               #从模块中引入变量,类型,函数

from 包名 import 模块名                               #从一个包中引入包中模块

from 包名.模块名 import 类型,函数,变量      #从一个包中模块引入模块中的类型,函数,变量

from ... import ...   主要是针对于包的引入方法,首先要明确包中的组织结构才能正确使用from import 语法

通过上述可以看出from import  分为两种操作

  1. 使用./..的相对路径的引入操作方式
  2. 直接使用包/模块名的绝对引入操作方式

相对引用:相对信用是相对于当前才做的文件的路径

同一级路径使用符号: .

上一级路径使用: ..

但是需要注意的是,一旦使用相对路径,就要明确所谓相对路径~是依赖他们所属的父级文件夹确定的

所以在使用相对引用时,引入的路径相对当前文件;执行的路径相对于引入的最外层文件夹,这样才能正确的使用相对引入操作执行我们的模块代码

例如:在demo文件夹下,有两个py文件,main.py和test.py.其中main.py中使用相对引用,引用了test中的数据(from . import test),此时,当我们在命令行中执行运行代码命令时需要"python -m demo.main" 

如果直接python main.py 去运行时,会出现个 "ImportError:cannot import name test’"

绝对引用:直接从包/模块的源头引用,运行方式和前面的一样

在说模块和包

python中的模块,指代的就是一个Python文件;模块名称就是文件名称

  1. 在一个python模块中可以包含的数据有:变量、函数、类型等等,是一个完整的独立的代码块!
  2. 独立的一个模块中的变量:全局变量、局部变量;能被其他模块引入使用的只有当前模块中的全局变量,其他模块对于当前模块中全局变量的操作和普通变量一致!
  3. 模块一旦被其他模块引入,就会自动执行模块中的所有代码
  4. 模块中的测试代码可以包含在 if __name__ == “__main__”: 语句块中,这样不会再其他模块引入时执行这些测试代码

:

python解释器在执行处理代码时,会默认将包含Python文件文件夹处理成默认包

默认包只具备文件路径关联的功能,无其他功能!

python中的标准包,是在文件夹中包含包声明文件__init__.py的文件夹,主要包含了一个名称为__init__.py的模块文件,该文件夹就是一个Python模块包

在一个python的包中,可以创建多个模块,统一由python包进行路径管理和导入方式的管理

包中的__all__:

默认情况下,包中所有的模块都是可以直接导入的,同样为了使用方便,可以通过通配符的方式来一次引入包中所有指定的模块

__all__属性就是用于模糊导入的特殊魔法属性,值是一个包含模块名称的列表,主要声明在__init__.py文件中,用于定义可以使用通配符的方式引入的模块

猜你喜欢

转载自blog.csdn.net/max_like/article/details/81634892