每个python文件就是一个模块、模块的名字就是_Python-模块和包

本文详细介绍了Python中的模块和包的概念、使用方法,包括import和from xxx import xxx的导入方式,以及模块的重用、命名空间、全局变量的影响。通过实例解析了模块导入的机制,强调了避免变量名冲突和正确导入模块的重要性,并探讨了包的创建、组织结构以及__init__.py的作用。同时,讨论了绝对导入和相对导入的区别及其在实际应用中的注意事项。
摘要由CSDN通过智能技术生成

今天我们来聊聊模块和包

一.模块

首先,我们先看一个老生常谈的问题,什么是模块,模块就是一个包含了python定义和声明的文件,文件名就是模块的名字加上.py后缀,欢聚话说我们目前写的所有的py文件都可以看成是一个模块但是我们import加载的模块一共分成四个通用类别:

1. 使用pyhton编写的py文件

2. 已被变异为共享库或者DLL或C或者C++的扩展

3. 包好一组模块的包.

4. 使用c编写并连接到python解释器的内置模块

为什么要使用模块? 为了我们写的代码可以重用,不至于把所有的代码都写在一个文件内. 当项目规模比较小的时候,完全可以使用一个py搞定整个项目的开发,但是如果是一个非常庞大的项目. 此时就必须要把相关的功能进行分离,以便我们的日常维护,以及新项目的开发.

如何使用模块? 我们已用过很多模块了,导入模块有两种方式

1. import 模块

2. from xxx import xxxx

二.import

首先我们先看import, 在使用import的时候, 我们先创建一个yitian.py. 在该文件中创建一些武林前辈和一些打斗场景, 代码如下:

print("片头曲. 啊! 啊~ 啊! 啊. 啊啊啊啊啊啊啊...")

main_person_man = "张无忌"

main_person_woman = "赵敏"

low_person_man_one = "成昆"

low_person_man_two = "周芷若"

def fight_on_light_top():

print("光明顶大战", main_person_man, "破坏了", low_person_man_one, "的大阴谋")

def fight_in_shaolin():

print("少林寺大战", main_person_man, "破坏了", low_person_man_two, "的大阴

谋")

接下来,金庸上场

import yitian

print(yitian.main_person_man) # 使用模块中定义好的名字

print(yitian.low_person_man_one)

yitian.fight_in_shaolin() # 调用模块中的函数

yitian.fight_on_light_top()

此时我们在金庸模块中引入了yitian模块.

在Python中模块是不能够重复导入的,当重复导入模块时,系统会根据sys.modules来判断该模块是否已经导入了,如果已经导入,则不会重复导入

import sys

print(sys.modules.keys()) # 查看导入的模块.

import yitian # 导入模块. 此时会默认执行该模块中的代码

import yitian # 该模块已经导入过了,不会重复执行代码

import yitian

import yitian

import yitian

import yitian

导入模块的时候都做了些什么? 首先,在导入模块的一瞬间,python解释器会先通过sys.modules来判断该模块是否已经导入了该模块,如果已经导入了则不再导入,如果该模块还未导入过,则系统会做三件事.

1. 为导入的模块创立新的名称空间

2. 在新创建的名称空间中运行该模块中的代码

3. 创建模块的名字,并使用该名称作为该模块在当前模块中引用的名字.

我们可以使用globals来查看模块的名称空间

print(globals())

打印结果:

{'__name__': '__main__', '__doc__': None, '__package__': None,

'__loader__': <_frozen_importlib_external.sourcefileloader object at>

0x10bbcf438>, '__spec__': None, '__annotations__': {}, '__builtins__'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值