一 . 模块

⾸先,我们先看⼀个老⽣常谈的问题. 什么是模块. 模块就是⼀个包含了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之路--模块和包的更多相关文章

  1. python之路模块与包

    一.import加载的模块分为四个通用类别:          1 使用python编写的代码(.py文件) 2 已被编译为共享库或DLL的C或C++扩展 3 包好一组模块的包 4 使用C编写并链接到 ...

  2. python之路——模块和包

    阅读目录 一 模块 3.1 import 3.2 from ... import... 3.3 把模块当做脚本执行 3.4 模块搜索路径 3.5 编译python文件 二 包 2.2 import 2 ...

  3. 二十五. Python基础(25)--模块和包

    二十五. Python基础(25)--模块和包 ● 知识框架   ● 模块的属性__name__ # my_module.py   def fun1():     print("Hello& ...

  4. Python之路-Python中的模块与包

    一.模块简介 在实际开发中我们不可能不用到系统的标准模块,或第三方模块. 如果想实现与时间有关的功能,就需要调用系统的time模块.如果想实现与文件和文件夹有关的操作,就需要要用到os模块. 每一个 ...

  5. Python中的模块与包

    标准库的安装路径 在import模块的时候,python是通过系统路径找到这些模块的,我们可以将这些路径打印出来: >>> pprint.pprint(sys.path) ['', ...

  6. 【循序渐进学Python】10.模块和包

    1.导入模块 任何Python程序都可以作为模块导入,只要Python解释器能找到我们定义的模块所在位置即可,一般来讲,在一个模块被导入时,Python解释器会按照下面的步骤进行搜索: 在当前所在目录 ...

  7. Python类、模块、包的区别

    类 类的概念在许多语言中出现,很容易理解.它将数据和操作进行封装,以便将来的复用. 模块 模块,在Python可理解为对应于一个文件.在创建了一个脚本文件后,定义了某些函数和变量.你在其他需要这些功能 ...

  8. Python进阶之模块与包

    模块 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB","S ...

  9. 【Python实战】模块和包导入详解(import)

    1.模块(module) 1.1 模块定义 通常模块为一个.py文件,其他可作为module的文件类型还有".pyo".".pyc".".pyd&qu ...

随机推荐

  1. HTTP请求报文解剖

    转自:https://www.iteye.com/topic/1124408 HTTP请求报文由3部分组成(请求行+请求头+请求体): 下面是一个实际的请求报文: ①是请求方法,GET和POST是最常 ...

  2. Oracle常用性能监控语句解析

    转:http://www.cnblogs.com/preftest/archive/2010/11/14/1876856.html 1.监控等待事件select event,sum(decode(wa ...

  3. maven-resources-plugin插件关于占位符不生效问题

    插件版本: <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0. ...

  4. Consul在.Net Core中初体验

    Consul在.Net Core中初体验 简介 在阅读本文前我想您应该对微服务架构有一个基本的或者模糊的了解 Consul是一个服务管理软件,它其实有很多组件,包括服务发现配置共享键值对存储等 本文主 ...

  5. num2cell

    num2cell的作用是把数值数组转换为cell数组. 最基本的用法是把数值数组的每个元素作为cell数组的元素,得到一个和原数组维度完全相同的cell数组,例如 >> A=magic(3 ...

  6. github 遇到Permanently added the RSA host key for IP address '192.30.252.128' to the list of known hosts问题解决

    刚开始使用github的时候不是很了解,新手一般的都会遇到这个问题Permanently added the RSA host key for IP address '192.30.252.128' ...

  7. 【转】DataTable与实体类互相转换

    原文地址:https://www.cnblogs.com/marblemm/p/7084797.html /// <summary> /// DataTable与实体类互相转换 /// & ...

  8. HBuilder使用夜神模拟器调试Android应用

    由于HBuilder的扫描机制无法直接连上夜神模拟器.我搞了好久终于找到办法了,分享给大家. 首先,启动HBuilder和夜神模拟器 然后打开cmd命令提示符 cd进入夜神模拟器bin目录 执行以下命 ...

  9. Eclipse MAT内存分析工具(Memory Analyzer Tool)

    MAT内存分析工具 MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器.可以用于查找内存泄露以及查看内存消耗情况.MAT是基于Eclipse开发的,是一款免费的性能分 ...

  10. Linux下如何让jar包程序在后台一直执行

    Linux下如何让Jar包程序在后台一直执行 shell命令 nohup java -jar xxx.jar & &:让程序后台执行. nohub:让程序控制台输出转移到nohub.o ...