一、模块

模块就是一个包含了python定义和申明的文件,文件名就是模块的名字加上.py的后缀/
模块的分类:
1、使用python编写的py文件
2、已被编译位共享库或者DLL或C或者C++的扩展
3、包好一组模块的包
4、使用c编写并连接到python解释器的内置模块
使用模块是为了让我们写的代码可以重用,不至于把所有的文件都写到一个py文件内。如果都写在一个py文件内,项目大时,不易维护。
导入模块的两种方式
1、import模块
2、from XXX import XXXX
yitian.py
print('...................')main_actor = '张无忌'
main_actress = '赵敏'
fan_main_actor = '成昆'
fan_main_actress = '周芷若'def light_war():print(f"{main_actor}破坏了{fan_main_actor}的阴谋诡计")def shaolin_war():print(f"{main_actor}打败了{fan_main_actress}")def ending():print(f"{main_actor}和{fan_main_actress}幸福的在一起了")def change(name):global main_actormain_actor = name
print("..................."

金庸来也
jinyong.py
import sys
import yitian as yt  # as 给模块重新命名# pycharm报错,模块路径有差异
# sys.path  搜索模块的路径
# print(sys.path)
# import yitian  # 如果已经到如果该模块,此时则不会再执行模块中的代码了print(yt.main_actor)
# print(main_actor)   报错  当前名称空间中没有main_actoryt.light_war()
yt.shaolin_war()
yt.ending()

导入模块后的流程:
1、在导入模块的开始,python解释器会先通过sys.modules 来判断爱模块是否已经导入了该模块,如果导入了,则不会再导入。如果该模块还未导入过,则系统会做三件事:
1、为导入的模块创立新的名称空间
2、在新创建的名称空间中运行该模块中的代码
3、创建模块的名字,并使用该名称作为该模块在当前模块中引用的名字(前提时没有as)
可以使用globals来查看模块的名称空间
print(globals())结果:{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000172F298C1D0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'F:/python_workspace_hxt/day24 内置模块 re/yitian.py', '__cached__': None, 'main_actor': '张无忌', 'main_actress': '赵敏', 'fan_main_actor': '成昆', 'fan_main_actress': '周芷若', 'light_war': <function light_war at 0x00000172F2881E18>, 'shaolin_war': <function shaolin_war at 0x00000172F2BFA268>, 'ending': <function ending at 0x00000172F2BFA158>, 'change': <function change at 0x00000172F9C3A400>}

注: 由于模块在导入的时候会创建自己的名称空间,所以在使用模块中的变量的时候一般不会产生冲突

import yitian as ytmain_actor = '周游'
print(yt.main_actor)  # 张无忌
print(main_actor)   # 周游

特别注意:如果我们在不统的模块这种引入了同一个模块,并且在某一个模块中改变了被引入模块中的全局变量,则其他模块看到的之也跟着变,原因是python的模块只会引入一次,大家共享一个名称空间
在yitian.py中添加如下代码

def change():global  fan_main_actressfan_main_actress = '张美欣'

jingyong1.py

import yitian  as  yt
yt.fan_main_actress = '周星娜'

jingyong.py

import  yitian as  yt
import  jingyong1print(yt.fan_main_actress)  # 周星娜

出现上述问题的原因
1、大家同享一个模块的名称空间
2、在jinyong1.py中改变了反角的名字
解决方案:
利用__name__这个内置变量,在python中,每个模块都有自己的__name__但是这个__name__的值是不定的。当我们把一个模块作为程序运行的人口时,此时该模块的__name__是“__main__”而如果我们把模块导入时,此时模块内部的__name__就是该模块自身的名字
在jinyong1.py
1
2
3
print(__name__)
# 结果为__main__

  在jinyong.py中

1
2
3
4
5
import jinyong1
print(__name__)
结果为 jinyong1

我们可以利用这个特性来控制模块内哪些代码是在被加载的时候就运行的,哪些时在模块被别人导入的时候就要执行的,也可以屏蔽掉一些不希望别人导入就运行的代码
if __name__=='__main__':
yitian.main_actor = '张无忌'  # 此时,只有从该模块作为入口运行的时候才会把main_actor设置为张无忌
print('张无忌其实是一个渣男')  # 只有运行该模块才会打印,import的时候是不会执行这里的代码的
我们还可以对导入的模块进行重命名
import yitian as yt  # 导入yitian,但是名字被重命名为yt,就好比变量赋值一样
a = 1 b = ayt.shaoli_war()  # 此时可以正常运行print(globals()){'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000002CC30D7C1D0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'F:/python_workspace_hxt/day24 内置模块 re/practice24.py', '__cached__': None, 're': <module 're' from 'C:\\Users\\huxia\\AppData\\Local\\Programs\\Python\\Python36\\lib\\re.py'>, 'sys': <module 'sys' (built-in)>, 'yt': <module 'yitian' from 'F:\\python_workspace_hxt\\day24 内置模块 re\\yitian.py'>}

一次也可以导入多个模块

1
import time,random,json,yitian
正确的导入模块顺序:
1、所有的模块导入都要写在最上面,基本
2、先引入内置模块
3、再引入扩展模块
4、最后引入自己定义的模块
三、from  XXX  import  XXX
在使用from的时候,python也会给我们的模块创建名称空间,这一点和import是一样的,但是from XXX import XXXX
的时候,只是把这个空间中的一些变量引入过来,部分导入。当一个模块中的内容过多的时候,可以选择性的导入要使用的内容。
from的坑:当我们从一个模块中引入一个变量的时候,如果当前文件中出现了崇明的变量时,会覆盖掉模块引入的哪个变量。
所以要切记,不可以重名,不仅仅变量名不要重复,我们自己创建的py文件的名字不要和系统内置的模块重名,否则,引入的模块都是python内置的模块。
那有⼀种 特殊的写法: from xxx import *  我们说此时是把模块中的所有内容都导入.  注意, 如果模块中 没有写出__all__ 则默认所有内容都导入. 如果写了了__all__ 此时导入的内容就是在__all__列表 中列出来的所有名字
# haha.py
__all__ = ["money", "eat"]
money = 100
def eat():    print("我是吃")
def drink():    print("我是呵呵")# test.py
from haha import *
eat()
print(money)
drink() # 报错

转载于:https://www.cnblogs.com/yanghongtao/p/10208962.html

day 25 模块与包相关推荐

  1. python之路---25 模块和包

    一.模块 1.导入方式 自己创建的模块名称 切不可和 内置模块的一样 ①  import  模块 ②  import 模块 as  名      设置在此空间的名称 ③  from 模块 import ...

  2. 25 Python之模块与包

    一.模块 模块就是一个包含了python定义和申明的文件,文件名就是模块的名字加上.py的后缀/ 模块的分类: 1.使用python编写的py文件 2.已被编译位共享库或者DLL或C或者C++的扩展 ...

  3. python之路——模块和包

    一.模块 1.什么是模块? 常见的场景:一个模块就是一个包含了Python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1.使用Python编 ...

  4. python-学习 协程函数 模块与包

    一.协程函数 yield的用法: 1:把函数的执行结果封装好__iter__和__next__,即得到一个迭代器2:与return功能类似,都可以返回值,但不同的是,return只能返回一次值,而yi ...

  5. python基础---模块与包

    1.模块导入方法 常见的场景: 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀,导入模块可以实现功能的重复利用 import加载的模块分为四个通用类别: 1 使 ...

  6. Python 中的黑暗角落(三):模块与包

    如果你用过 Python,那么你一定用过 import 关键字加载过各式各样的模块.但你是否熟悉 Python 中的模块与包的概念呢?或者,以下几个问题,你是否有明确的答案? 什么是模块?什么又是包? ...

  7. python - 啃书 第七章 模块、包和库 (一)

    概述 在Python中,一个模块(Module)是一个以.py结尾的Python文件,包含了Python对象和语句. 在python中,一切皆对象.数字.字符串.元组.列表.字典.函数.方法.类.模块 ...

  8. python 必备模块和包_量化金融分析师(AQF)|这45道Python面试题都对你非常有帮助!(二)...

    量化金融分析师(AQF)|这45道Python面试题都对你非常有帮助!(二) 21)如何在Python中复制对象? 要在Python中复制对象,可以尝试copy.copy()或copy.deepcop ...

  9. python笔记6 模块与包 程序开发规范 包 re sys time os模块

    模块与包 python 模块首引用加载到内存,如果再次引用此模块,直接从内存中读取. python文件分为:执行文件(解释器运行的文件),被引用文件(import) 模块引用一共发生了3件事: 1.他 ...

最新文章

  1. shell编程--case判断
  2. 雷电2接口_地表最强?代替电脑的所有接口,雷电3或有望一统接口江湖
  3. 为什么我从Python转战到Node.js
  4. Re_Write序列号
  5. winform数据传递到html,C#下winform和JS的互相调用和传参(webbrowser)
  6. mysql inputoutput_PHP:同时使用INPUT和OUTPUT参数(不“ INOUT”)调用MySQL存储过程
  7. iOS之Cocoapods安装
  8. CentOS 7.6虚拟机ping: www.baidu.com: Name or service not known
  9. 在Ubuntu系统中安装字体(以安装华文行楷和方正舒体为例)
  10. 将txt文件编码改为utf-8格式
  11. YOLOV5训练数据(火焰检测)
  12. 【自动控制原理】渐进稳定与临界稳定的区别与联系
  13. Math.round(-1.5) 等于多少
  14. Datablau产品之Kubernetes(K8S)部署
  15. php pdo函数说明,PHP PDO函数库详解,pdo函数库详解
  16. openstack上 的云主机手动疏散案例
  17. 魔兽怀旧卓越服务器微信,《魔兽世界》怀旧服火爆超预期,部分服务器排队简直可怕...
  18. html div背景图片路径,css如何设置背景图片位置?
  19. Javaweb笔记: 第02章_MySQL基础
  20. MODEL COMPRESSION VIA DISTILLATION AND QUANTIZATION

热门文章

  1. 在百度地图或谷歌地图给中国各省着色并高亮显示
  2. 程序员必备的英文单词
  3. 计算机图形数学知识点,初三数学知识点归纳整理
  4. 基于C语言开发菜鸟驿站管理系统【100010822】
  5. 声纹识别demo环境的搭建
  6. 从零搭建本地pypi镜像源2:下载清华pypi镜像源
  7. 搭配Online:MBOT将在2020年推出全球首个医疗机器人,股票大涨220%
  8. 程序员的自我修养之数学基础04:特殊矩阵(零矩阵、单位矩阵、对角矩阵、逆矩阵、转置矩阵、对称矩阵)
  9. 对计算机的过度依赖英语作文,四级英语作文范文不要过分依赖智能机
  10. Deep Leakage from Gradients