7.0包、模块、函数与变量作用域

什么是包?

物理表现上包就是一个文件夹,和文件夹的唯一区别为:包是一个包含“__init__.py”模块的文件夹

包的命名规则:后期补充

__init__.py文件说明:

一般模块的命名空间为packagename.modulename,`__init.py`模块的命名空间不需要package_name.modele_name,而直接使用package_name表示

当包导入时,python将自动执行__init__.py文件(其实任意模块被导入,模块内的代码都将被自动执行)

__init__.py文件常用于包和模块的初始化 ,以及做共享导入

什么是模块?

一个.py文件即被称为一个模块

模块的命名规则后期补充

包、模块、类三者关系

一个包下可以包含多个模块,一个模块可以包含多个类

模块之间如何引用?

包和模块不会重复导入

导入包时应避免循环导入,否则会报错

一个模块被导入,该模块里的代码会自动执行,即使里面的方法并没用被手动调用

import导入:只能用于导入模块

案例一:导入同级模块

import module_name

print(modelu_name.variable_name)

案例二:导入同级的子包下的模块

import packege_name.module_name

print(packege_name.module_name.variable_name)

案例三:导入同级子包下的模块并赋予命名空间(即模块路径:package_name.module_name)别名

import package_name.module_name as alis_name
print(alis_name.variable_name)

from import 方式:支持导入模块、变量、方法

案例一:导入模块

from package_name import module_name

案例二:导入变量

from module_name import variable_name

案例三:导入多个变量

from module_name import variable1_name,variable2_name,variable3_name

python希望一行代码不超过80字符,当import语句一行代码超过80字符可采用如下方式换行

方式一:使用\

from modele_name import a,b,\
c

方式二:使用()

from module_name import (a,b,
c)

案例四:导入被导入模块中所有暴露的变量

from module_name import *

建议尽量少使用这个大而全的导入方式

案例五:共享导入

# __init__.py
import sys
import datetime
import io
# package_name中已导入sys、datetime、io三个模块,故该模块不需要导入这三个模块仍可以使用sys、datetime、io模块
import package_name

print(package_name.sys.path)

限制导出

模块限制可导出的变量:在模块里添加如下代码

# 模块下的variable1_name、variable2_name可被导出,其他变量不可被导出
__all__=['variable1_name','variable2_name']

包限制可导出的模块:在包下的__init__.py模块下添加如下代码

# 包下的modele1_name可被导出,其他模块不可被导出
__all__=['module1_name']

Last updated

Was this helpful?