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 ...
随机推荐
- Ubuntu下软件安装的几种方式,apt,dpkg工具的使用
通常 Linux 上的软件安装主要有四种方式: 在线安装 从磁盘安装deb软件包 从二进制软件包安装 从源代码编译安装 这几种安装方式各有优劣,而大多数软件包会采用多种方式发布软件,所以我们常常需要全 ...
- y7000笔记本 darknet-yolo安装与测试(Ubuntu18.04+Cuda9.0+Cudnn7.1)
环境配置看上一贴 https://www.cnblogs.com/clemente/p/10386479.html 1 安装darknet 1-1 克隆darknet repo git clone h ...
- move或rebuild lob分区对象
当使用如下语法移动或重建一个lob分区对象,将报错: SQL> alter table SHOW_LOB_STORAGE move lob(DDD) store as (tablespace P ...
- 【转】理解WebKit和Chromium: JavaScript引擎简介
转载请注明原文地址:http://blog.csdn.net/milado_nju1. 什么是JavaScript引擎什么是JavaScript引擎?简单来讲,就是能够提供执行JavaScript代码 ...
- 【vue】vue +element 搭建项目,在使用InputNumber 计数器时遇到的问题
自己遇到的坑: InputNumber 计数器的change事件定义时如果不传入参数value,会产生this.num不同步的问题 <template> <el-input-numb ...
- Spring Boot配置文件详解-ConfigurationProperties和Value优缺点-(转)好文
文章转自 http://www.cnblogs.com/itdragon/p/8686554.html Spring Boot提供了两种常用的配置文件,分别是properties文件和yml文件.他们 ...
- node.js之十大Web框架
之前接触过Node.js是因为好奇大前端越来越能干了,连我后台的饭碗都要抢了,太嚣张了,于是我想打压打压它,然后就这样接触它了.再到后来是因为Settings-Sync插件二次开发,我需要用node. ...
- vector--不定长数组
(一些很基础的东西) vector就是一个不定长数组 vector<int>a (黄色部分可替换) a.size() 读取它的大小 a.resize() 改变大小 a.push_back( ...
- 剑指offer——链表中倒数第k个结点
输入一个链表,输出该链表中倒数第k个结点. class Solution { public: ListNode* FindKthToTail(ListNode* pListHead, unsigned ...
- [MicroPython]TurniBit开发板旋转按钮控制脱机摆动
一.实验目的: ?学习在PC机系统中扩展简单I/O 接口的方法 ?学习TurnipBit拼插编程 ?了解舵机工作原理 ?学习TurnipBit扩展板舵机和旋转按钮接线方式 二.所需原器件: ?Turn ...