python之路--模块和包
一 . 模块
⾸先,我们先看⼀个老⽣常谈的问题. 什么是模块. 模块就是⼀个包含了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的时候, 我们先创建⼀个tianlong.py. 在该⽂件中创建
⼀些武林前辈和⼀些打⽃场景, 代码如下.
main_male_actor = '萧峰'
def fight():
print(f'{main_male_actor}少林寺大战丁春秋,庄聚贤,慕容复')
def end():
print('萧峰降龙十八掌天下第一')
然后在创建一个江湖.py 在该文件中使用import
import tianlong
tianlong.fight() # 萧峰少林寺大战丁春秋,庄聚贤,慕容复
tianlong.end() # 萧峰降龙十八掌天下第一
在Python中模块是不能够重复导入的. 当重复导入模块时. 系统会根据sys.modules来判断
该模块是否已经导入了. 如果已经导入. 则不会重复导入
# 如果我在tianlong.py文件中写一个print('====飞雪连天射白鹿,笑书神侠倚碧鸳====')
# 然后在jainghu.py 文件中引入import tianlong 无论引入多少次,都只打印一次
# ====飞雪连天射白鹿,笑书神侠倚碧鸳====
导入模块的时候:
1. 去判断当前正在导入的模块是否已经倒入过
2. 如果已经导入过,不会重新导入该模块
3. 如果没有导入过. 首先开辟一个内存空间
4. 把该模块中的代码放在新开辟的空间中. 运行该模块中的代码
5. 把该文件的名字作为当前名称空间的名字(前提是没有as)
在Python中. 每个模块都有⾃⼰的__name__ 但是这个__name__的值是不定的. 当我们把⼀个模块作为程序运⾏的入⼝时.
此时该模块的__name__是"__main__" , ⽽如果我们把模块导入时. 此时模块内部的__name__就是该模块⾃⾝的名字
我们可以利⽤这个特性来控制模块内哪些代码是在被加载的时候就运⾏的. 哪些是在模块
被别⼈导入的时候就要执⾏的. 也可以屏蔽掉⼀些不希望别⼈导入就运⾏的代码. 尤其是测试代码.
if __name__ == '__main__':
tianlong.main_male_actor = '萧峰'
# 此时, 只有从该模块作为入运行的时候才会把main_male_actor设置成萧峰
print("哇哈哈哈哈哈")
# 只有运行该模块才会打印. import的时候是不会执行这里的代码的
最后,切记,不要重名,我们创建的py 文件的名字千万不要和系统内置模块重名.
python之路--模块和包的更多相关文章
- python之路模块与包
一.import加载的模块分为四个通用类别: 1 使用python编写的代码(.py文件) 2 已被编译为共享库或DLL的C或C++扩展 3 包好一组模块的包 4 使用C编写并链接到 ...
- python之路——模块和包
阅读目录 一 模块 3.1 import 3.2 from ... import... 3.3 把模块当做脚本执行 3.4 模块搜索路径 3.5 编译python文件 二 包 2.2 import 2 ...
- 二十五. Python基础(25)--模块和包
二十五. Python基础(25)--模块和包 ● 知识框架 ● 模块的属性__name__ # my_module.py def fun1(): print("Hello& ...
- Python之路-Python中的模块与包
一.模块简介 在实际开发中我们不可能不用到系统的标准模块,或第三方模块. 如果想实现与时间有关的功能,就需要调用系统的time模块.如果想实现与文件和文件夹有关的操作,就需要要用到os模块. 每一个 ...
- Python中的模块与包
标准库的安装路径 在import模块的时候,python是通过系统路径找到这些模块的,我们可以将这些路径打印出来: >>> pprint.pprint(sys.path) ['', ...
- 【循序渐进学Python】10.模块和包
1.导入模块 任何Python程序都可以作为模块导入,只要Python解释器能找到我们定义的模块所在位置即可,一般来讲,在一个模块被导入时,Python解释器会按照下面的步骤进行搜索: 在当前所在目录 ...
- Python类、模块、包的区别
类 类的概念在许多语言中出现,很容易理解.它将数据和操作进行封装,以便将来的复用. 模块 模块,在Python可理解为对应于一个文件.在创建了一个脚本文件后,定义了某些函数和变量.你在其他需要这些功能 ...
- Python进阶之模块与包
模块 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB","S ...
- 【Python实战】模块和包导入详解(import)
1.模块(module) 1.1 模块定义 通常模块为一个.py文件,其他可作为module的文件类型还有".pyo".".pyc".".pyd&qu ...
随机推荐
- [matlab] 15.罚函数降维
求非线性规划 min f(x)= x(1)^2 + x(2)^2 + 8 s.t. { x(1)^2-x(2)>=0 , -x(1) - x(2)^2 +2 = 0, x(1)>=0 ,x ...
- node访问oracledb的环境搭建
关于安装oracleDB环境官网说明地址: https://oracle.github.io/node-oracledb/INSTALL.html 环境搭建所需软件和文档的压缩包 链接: https: ...
- Collection 和 Collections 、 Array 与 Arrays 的区别
比较 Collection 和 Collections 的区别, Array 与 Arrays 的区别 Collection 和 Collections的区别 Collection 在 Java.ut ...
- Python _内置函数3_45
reversed: #reversed() l = [1,2,3,4,5] l.reverse() print(l) #改变了原来的列表 l = [1,2,3,4,5] l2 = reversed(l ...
- H5 15-交集选择器
15-交集选择器 我是段落 我是段落 我是段落 我是段落 我是段落 <!DOCTYPE html> <html lang="en"> <head> ...
- hibernate多对多的更新问题
错误原因 A different ]; nested exception ]] with root cause org.hibernate.NonUniqueObjectException: A di ...
- (第十三周)Final Review会议
项目名:食物链教学工具 组名:奋斗吧兄弟 组长:黄兴 组员:李俞寰.杜桥.栾骄阳.王东涵 Final Review会议 时间:2016.12.2 13:00——15:00 地点:冬华楼一楼大厅 会 ...
- T-shirt buying CodeForces - 799B (小根堆+STL)
题目链接 思路: 由于题目说了只有1,2,3,三种色号的衣服,然后开三个对应色号的小根堆, 我是根据pair<int,int> 创建了一个以价格小的优先的优先队列. pair中的另外一个i ...
- vue入门(一)
通过JS引用vue就不说了,重点说一下使用npm搭建vue脚手架. (以下是windows系统下的操作,win7+) npm是个命令行工具,在搭建vue脚手架之前首先要安装nodeJS,下面是node ...
- 每周分享之cookie详解
本章从JS方向讲解cookie的使用.(实质上后端代码也是差不多用法,无非读取和设置两块) 基本用法:document.cookie="username=pengpeng"; 修改 ...