python的模块和包

python的模块和包

一、模块理解:

定义:模块就是平时写的代码,保存的每一个 .py结尾的文件,都是一个独立的模块。

Python中的模块分为三种,分别是:

  1. 内置模块 - Python解释器自带
  2. 第三方模块 - 需要手动安装
  3. 自定义模块 - 比如一个尾缀.py的文件

二、模块导入:

1. import导入

语法形式:

impport 模块名

示例:

import datetime
x = datetime.datetime.now()
print(x)

输出:

2022-05-27 14:30:12.217152

解释:用python自带的datetime模块导入。

日期输出:日期中包含年、月、日、小时、分钟、秒、微秒。

2. from import语句

定义: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。

3.from·····import*语句

语法形式:

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后面加了“*”符号,还是会导入全部的模块

三、包

1.包与模块的区别

包的实现更要简洁一些。创建一个包的操作有:

~创建一个文件夹用于存放相关的模块,文件夹的名字即包的名字。

~在文件夹中创建一个 __ init __.py的模块文件,内容可以为空。

~将相关模块放入模块。

python中的包,是模块包,程序包的简称,主要是用来包含多个相同相似功能的 python模块的文件夹。

包产生的原因:如果一个项目中,包含了大量的 Python文件/模块,存在两个问题:Python模块过多,导致某个模块查找不方便查找。大型项目项目中多个角色的模块,出现了命名冲突的问题。

2.导入包的用法

包的模块有很多,可以直接导入包,也可以直接导入包的模块。

(1)导入包的模块
import 包名,模块名称
(2使用from···· imoprt 形式
from 包名称 import 模块名称
(3)使用from ····import*形式
from 包名称 import*
(4)导入包的模块的指定方向或者变量
from 包的名称,模块的名称 import 方法名称

原理:和模块的导入很类似,类比去记忆加深理解。

3.包的结构

工作目录
|
|-- utils
|
|-- init.py
|-- server.py #模块1
|-- client.py #模块2
|-- test.py

四、命名空间

1.定义理解

定义:是名称到对象的映射集合,这种说法比较抽象。

命名空间是一个广义而且模糊的概念,一个总的名字包含若干个名字,这就是命名空间。比如:模块就是一个命名空间,一个模块包含了一些变量、函数和类;包也是命名空间,它包含了一些模块和子包;类也是一个命名空间,它包含自己的属性和方法。

命名空间的作用是能够提供对变量名的层次访问。

2.全局命名空间

全局命名空间是一个特殊的命名空间,一旦进入解释器,就创建了一个全局命名空间(global name space),这是唯一全局命名的空间。

3.局部命名空间

局部命名空间就是一个代码块创造的一个临时的命名空间,进入该代码块的时候,当进入该代码块的时候,局部变量空间被创建,当退出这个代码块时,该局部命名空间就被销毁。例如:定义一个函数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__': <module 'builtins' (built-in)>, '__file__': 'C:\\Users\\86139\\学习\\main.py', '__cached__': None, 'TestA': <function TestA at 0x0000020C5061DB80>}
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000020C50486D00>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:\\Users\\86139\\学习\\main.py', '__cached__': None, 'TestA': <function TestA at 0x0000020C5061DB80>}

当调用TestA的时候,就生产该函数的命名空间。当TestA返回后或抛出异常的时候,局部命名空间就被删除,获得局部命名空间的内容可以用locals函数。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值