模块                            

什么是模块
模块:就是一系列功能的结合体 ,也可以说 一个.py文件包含了 Python 对象定义和Python语 那么 他就 可以说是 一个模块
模块的三种来源:
1.内置的(python解释器自带)**
2.第三方的 ***
3.自定义的  *
模块的四种表现形式
1.使用python编写的py文件(也就意味着py文件也可以称之为模块:一个py文件也可以称之为一个模块)
2.已被编译为共享库或DLL的C或C++扩展(了解)
3.把一系列模块组织到一起的文件夹(文件夹下有一个__init__.py文件,该文件夹称之为包)
包:一系列py文件的结合体
4.使用C编写并连接到python解释器的内置模块 为什么要用模块
1.用别人写好的模块(内置的,第三方的): 本质就是 拿来主义, 能够 极大的提高开发效率
2.使用自己写的模块(自定义的):当程序比较庞大的时候,你的项目不可能只在一个py中
那么当多个文件中都需要使用相同的方法的时候 可以将该公共的方法写到一个py文件中
其他的文件以模块的形式导过去直接调用即可 如何使用模块
注意:要区分哪个是执行文件,哪个是被导入文件 实例句式:>>>>
from  filemodul.modul1 import my_modu1

my_modul.func1 ()

"""
绝对导入必须依据执行文件所在的文件夹路径为准
1.绝对导入无论在执行文件中还是被导入文件都适用 相对导入
.代表的当前路径
..代表的上一级路径
...代表的是上上一级路径 注意相对导入不能再执行文件中使用
相对导入只能在被导入的模块中使用,使用相对导入 就不需要考虑
执行文件到底是谁 只需要知道模块与模块之间路径关系
"""
import my_modu12

"""
右键运行run_modul.py文件首先会创建一个run_modul.py的名称空间
首次导入模块(my_modul.py)(******)
1.执行my_modul.py文件
2.运行my_modul.py文件中的代码将产生的名字与值存放到my_moddul.py名称空间中
3.在执行文件中产生一个指向名称空间的名字(my_modul) 多次导入不会再执行模块文件,会沿用第一次导入的成果(******)
"""
money = 9999 def read1():
print('from run read1')
# 访问模块中的名字指向的值
# print(md.money) # 使用import导入模块 访问模块名称空间中的名字统一句势:模块名.名字 # md.read1()
# md.read2()
# print(md.change) md1.change()
print(money)
print(md1.money) """
1.只要你能拿到函数名 无论在哪都可以通过函数加括号来调用这个函数(会回到函数定义阶段 依次执行代码)
2.函数在定义阶段 名字查找就已经固定死了 不会因为调用位置的变化而改变 使用import导入模块 访问模块名称空间中的名字统一句势:模块名.名字
1.指名道姓的访问模块中的名字 永远不会与执行文件中的名字冲突
2.你如果想访问模块中名字 必须用模块名.名字的方式
""" """
只要当几个模块有相同部分或者属于用一个模块,可以使用上面的方法
当几个模块没有联系的情况下 应该分多次导入
import os
import time
import md
ps:通常导入模块的句式会写在文件的开头
""" """
当模块名字比较复杂的情况下 可以给该模块名取别名

from  my_modul_file import modul 
当我们运行执行文件 ,执行文件 会先产生执行文件的名称空间 ,然后 执行到 from my_modul_file import modul 语句 会执行一次
my_modul_file.py 文件一次 ,然后 生成属于my_modul_file.py的名称空间,接下来 会往执行文件中添加 相应对象名称.
如果我们使用from md import * 的方式 ,可以一次性将所有的md文件中的名称全部导入执行文件名称空间中 ,但是不是很推荐这种写法,如果导入
的模块 我们不是很熟悉,那么 很多变量名会被占用 ,且该方法会浪费大量的资源.
如果实在要用 * 来载入 那么md 文件中的__all__[]方法 可以指定 当py文件被当做 模块导入的时候 哪些名称会被拿走 ,如果不写 ,就默认是该文件
内的所有名称.
如果出现循环导入问题 那么一定是你的程序设计的不合理
循环导入问题应该在程序设计阶段就应该避免 解决循环导入问题的方式
1.方式1
将循环导入的句式写在文件最下方() 2.方式2
函数内导入模块
# print(__name__)
# 当文件被当做执行文件执行的时候__name__打印的结果是__main__
# 当文件被当做模块导入的时候__name__打印的结果是模块名(没有后缀)
# if __name__ == '__main__':
# index1()
# index2() # if __name__ == '__main__': # 快捷写法 main直接tab键即可
# index1()
# index2()
"""
模块的查找顺序
1.先从内存中找
2.内置中找
3.sys.path中找(环境变量):
一定要分清楚谁是执行文件谁是被导入文件(******) 是一个大列表,里面放了一对文件路径,第一个路径永远是执行文件所在的文件夹
"""
# import time
# import md
# time.sleep(20)
# md.f1() # import time
# print(time.name)
#
# """
# 注意py文件名不应该与模块名(内置的,第三方)冲突
# """

当一个模块被导入到一个脚本,模块顶层部分的代码只会被执行一次。

因此,如果你想重新执行模块里顶层部分的代码,可以用 reload() 函数。该函数会重新导入之前导入过的模块。语法如下:

reload(module_name)
												

python 模块 来了 (调包侠 修炼手册一)的更多相关文章

  1. python模块安装查看、包制作

    一. 模块安装 ubuntu : apt-get install python-pip redhat: yum install python-pip pip install 模块 pip instal ...

  2. Python模块包(pycharm右键创建文件夹和python package的区别)中__init__.py文件的作用

    在eclipse中用pydev开发Python脚本时,我遇到了一个这样的现象,当我新建一个pydev package时,总会自动地生成一个空的__init__.py文件,因为是python新手,所以很 ...

  3. 18.Python模块包(pycharm右键创建文件夹和python package的区别)中__init__.py文件的作用

    原来在python模块的每一个包中,都有一个__init__.py文件(这个文件定义了包的属性和方法)然后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了.当 ...

  4. Python深入:Distutils发布Python模块--转载

    https://blog.csdn.net/gqtcgq/article/details/49255995 Distutils可以用来在Python环境中构建和安装额外的模块.新的模块可以是纯Pyth ...

  5. Python深入:Distutils发布Python模块

    Distutils可以用来在Python环境中构建和安装额外的模块.新的模块可以是纯Python的,也可以是用C/C++写的扩展模块,或者可以是Python包,包中包含了由C和Python编写的模块. ...

  6. 大话python模块与包

    前言 眼看着老掌门年纪越来越大,掌门之位的传承也成了门派中的一件大事.这天,老掌门把小掌门叫到跟前,语重心长地说道:孩子啊,以后你就要继任掌门之位了,我就传授此生所学的绝世功法与你,以后可要悉心学习, ...

  7. 【数学建模】线性规划各种问题的Python调包方法

    关键词:Python.调包.线性规划.指派问题.运输问题.pulp.混合整数线性规划(MILP) 注:此文章是线性规划的调包实现,具体步骤原理请搜索具体解法.   本文章的各个问题可能会采用多种调用方 ...

  8. (三)运用Python模块和包

    1 引言 为了能够在Python项目中高效地运用Python模块和包,我们需要进一步地来了解它们是如何在Python项目中进行定义.使用和工作的. 2 Python模块和包 Python模块和包的基本 ...

  9. python模块及包的导入

    一.模块 通常模块为一个文件,直接使用import来导入就好了.可以作为module的文件类型有".py".".pyo".".pyc".&q ...

随机推荐

  1. toString()方法的使用

    toString()方法: java.lang.Object类的toString()方法的定义如下: public String toString(){ return getClass().getNa ...

  2. windows核心编程课程实践---多线程文件搜索器(MFC界面)

    课上完了连老师见都没见一面QAQ....记录一下该小项目 效果如下: 1.实现文件搜索功能,并封装为类 1)首先是文件搜索类Rapidfinder的构造函数和析构函数和文件信息初始化函数和文件路径规格 ...

  3. 爱奇艺|B站|优酷|腾讯视频高清无水印视频下载方法(软件工具教程)

    导读:经常在大型视频网站平台上看到一些很价值和视频,希望能高清无水印下载到本地学习观看,今天小程序定制开发代码哥DaiMaGe6给大家分享一招免费下载全网高清无水印视频的方法. 高清无水印视频下载工具 ...

  4. HDL-数字电路建模的要点

    https://mp.weixin.qq.com/s/tEDMWf1gk0e7u4hIWKM9bQ   ​​   一. 拓扑   数字电路的拓扑抽象出来之后比较简单,就是线(Wire)和开关(Swit ...

  5. float:left的妙用

    在html页面中,我们总是会遇到这样的情况: 当然,这是比较简单的情况,用ul内包li就可以, <ul> <li><img src="logo.jpg" ...

  6. 【HBase】HBase架构图

  7. Java实现 LeetCode 718 最长重复子数组(动态规划)

    718. 最长重复子数组 给两个整数数组 A 和 B ,返回两个数组中公共的.长度最长的子数组的长度. 示例 1: 输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出: 3 解释 ...

  8. Java实现 蓝桥杯VIP 基础练习 时间转换

    问题描述 给定一个以秒为单位的时间t,要求用"h️s" 的格式来表示这个时间.H表示时间,M表示分钟,而s表示秒,它们都是整数且没有前导的"0".例如,若t=0 ...

  9. Java实现蓝桥杯模拟正整数序列的数量

    问题描述 小明想知道,满足以下条件的正整数序列的数量: 1. 第一项为 n: 2. 第二项不超过 n: 3. 从第三项开始,每一项小于前两项的差的绝对值. 请计算,对于给定的 n,有多少种满足条件的序 ...

  10. Java实现 蓝桥杯VIP 算法训练 集合运算

    问题描述 给出两个整数集合A.B,求出他们的交集.并集以及B在A中的余集. 输入格式 第一行为一个整数n,表示集合A中的元素个数. 第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素. 第三行 ...