定义:模块就是平时写的代码,保存的每一个 .py结尾的文件,都是一个独立的模块。
Python中的模块分为三种,分别是:
语法形式:
impport 模块名
示例:
import datetime
x = datetime.datetime.now()
print(x)
输出:
2022-05-27 14:30:12.217152
解释:用python自带的datetime模块导入。
日期输出:日期中包含年、月、日、小时、分钟、秒、微秒。
定义:form import语句允许编写人员只导入模块的一部分,例如:导入某个方法,某个变量。
语法形式:
from 模块 import 方法 (变量)名1, 方法(变量)名2········
示例:
from time import gmtime
if gmtime().tm_year == 2022:
for i in range(1,12):
print(str(gmtime().tm_year)+'年'+str(i)+'月')
输出;
2022年1月
2022年2月
2022年3月
2022年4月
2022年5月
2022年6月
2022年7月
2022年8月
2022年9月
2022年10月
2022年11月
2022年12月
解释:有关键字import还是导入time模块,存在关键字from这次只调用gmtime。
语法形式:
from 模块 import *
示例:
from time import *
if gmtime().tm_year == 2022:
for i in range(1,13):
print(str(gmtime().tm_year)+'年'+str(i)+'月')
输出:
2022年1月
2022年2月
2022年3月
2022年4月
2022年5月
2022年6月
2022年7月
2022年8月
2022年9月
2022年10月
2022年11月
2022年12月
解释:import后面加了“*”符号,还是会导入全部的模块
包的实现更要简洁一些。创建一个包的操作有:
~创建一个文件夹用于存放相关的模块,文件夹的名字即包的名字。
~在文件夹中创建一个 __ init __.py的模块文件,内容可以为空。
~将相关模块放入模块。
python中的包,是模块包,程序包的简称,主要是用来包含多个相同相似功能的 python模块的文件夹。
包产生的原因:如果一个项目中,包含了大量的 Python文件/模块,存在两个问题:Python模块过多,导致某个模块查找不方便查找。大型项目项目中多个角色的模块,出现了命名冲突的问题。
包的模块有很多,可以直接导入包,也可以直接导入包的模块。
import 包名,模块名称
from 包名称 import 模块名称
from 包名称 import*
from 包的名称,模块的名称 import 方法名称
原理:和模块的导入很类似,类比去记忆加深理解。
工作目录
|
|-- utils
|
|-- init.py
|-- server.py #模块1
|-- client.py #模块2
|-- test.py
定义:是名称到对象的映射集合,这种说法比较抽象。
命名空间是一个广义而且模糊的概念,一个总的名字包含若干个名字,这就是命名空间。比如:模块就是一个命名空间,一个模块包含了一些变量、函数和类;包也是命名空间,它包含了一些模块和子包;类也是一个命名空间,它包含自己的属性和方法。
命名空间的作用是能够提供对变量名的层次访问。
全局命名空间是一个特殊的命名空间,一旦进入解释器,就创建了一个全局命名空间(global name space),这是唯一全局命名的空间。
局部命名空间就是一个代码块创造的一个临时的命名空间,进入该代码块的时候,当进入该代码块的时候,局部变量空间被创建,当退出这个代码块时,该局部命名空间就被销毁。例如:定义一个函数TestA:
def TestA():
a=3
print(locals())
print(globals())
输出:
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000020C50486D00>, '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': 'C:\\Users\\86139\\学习\\main.py', '__cached__': None, 'TestA': }
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000020C50486D00>, '__spec__': None, '__annotations__': {}, '__builtins__': , '__file__': 'C:\\Users\\86139\\学习\\main.py', '__cached__': None, 'TestA': }
当调用TestA的时候,就生产该函数的命名空间。当TestA返回后或抛出异常的时候,局部命名空间就被删除,获得局部命名空间的内容可以用locals函数。