我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python 模块与包

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python 模块与包

一、模块
 
模块就是一个包含了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_actor
    main_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_actor

yt.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 yt

main_actor = '周游'
print(yt.main_actor)  # 张无忌
print(main_actor)   # 周游
特别注意:如果我们在不统的模块这种引入了同一个模块,并且在某一个模块中改变了被引入模块中的全局变量,则其他模块看到的之也跟着变,原因是python的模块只会引入一次,大家共享一个名称空间
 
在yitian.py中添加如下代码
def change():
    global  fan_main_actress
    fan_main_actress = '呵呵'

jingyong1.py

import yitian  as  yt
yt.fan_main_actress = '哈哈'

jingyong.py

import  yitian as  yt
import  jingyong1

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

在jinyong.py中

import jinyong1
 
print(__name__)
 
结果为 jinyong1
 我们可以利用这个特性来控制模块内哪些代码是在被加载的时候就运行的,哪些时在模块被别人导入的时候就要执行的,也可以屏蔽掉一些不希望别人导入就运行的代码
 
if __name__=='__main__':
    yitian.main_actor = '张无忌'  # 此时,只有从该模块作为入口运行的时候才会把main_actor设置为张无忌
    print('张无忌其实是一个渣男')  # 只有运行该模块才会打印,import的时候是不会执行这里的代码的
 
我们还可以对导入的模块进行重命名
import yitian as yt  # 导入yitian,但是名字被重命名为yt,就好比变量赋值一样
a = 1 b = a

yt.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'>}

一次也可以导入多个模块

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() # 报错

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python 模块与包

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python模块与包

一、模块的定义与使用1.1、模块的定义Python中,模块在物理形式上表现为以.py 结尾的代码文件  一个文件被看作一个独立的模块, 一个模块也可以被看作一个文件; 每个模块都有自己的名称空间。Pyhton允许”导入”其他模块以实现代码重
2023-01-31

Python 模块与包

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

python -模块与包

********************************模块与包*****************************一、模块在 Python 中,一个.py文件就称之为一个模块(Module)。•大大提高了代码的可维护性;•编
2023-01-31

【Python3】Python模块与包

一、模块导入1. 定义Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。模块让你能够有逻辑地组织你的 Python 代码段。把相关的代码分配到一个模块里能让你
2023-01-31

Python基础——模块与包

在Python中,可以用import导入需要的模块、包、库、文件等。 把工作路径导入系统路径 import os#os是工作台import sys#sys是系统sys.path.append(os.getcwd())sys.path写脚本文
2023-01-31

Day5-python中的模块与包

1.什么是模块 最常见的场景,一个模块就是包含一组功能的python文件,例如module.py,模块名是module 可以使用import module,四个通用类别: 1、使用python编写的
2023-01-31

Python-模块与包的管理

一.模块1.模块实质上就是一个以.py结尾的文件,可以被其他py文件调用;2.使用模块- 大大提高了代码的可维护性;- 编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用;3.导入模块时,会去python的默认搜索路径中寻找;-
2023-01-31

Go 模块与包

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《Go 模块与包》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~问题内容刚刚开
Go 模块与包
2024-04-04

python之基础篇(八)——模块与包

防伪码:忘情公子著python中的模块  将代码量较大的程序分割成多个有组织的、彼此独立但又能互相交互的代码片段,这些自我包含的有组织的代码段就是模块。  模块在物理形式上表现为以.py结尾的代码文件:    一个文件被看作一个独立的模块,
2023-01-31

Python之异常处理、模块与包

MarkdownPad Document程序中错误分成两种语法错误:过不了Python解释器逻辑错误异常处理什么是异常处理Python解释器检测到错误,触发异常,在发生异常时捕捉异常,如果捕捉成功则进入另外一个处理分支,是程序不会崩溃,这就
2023-01-31

Python中包与模块的示例分析

这篇文章主要为大家展示了“Python中包与模块的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python中包与模块的示例分析”这篇文章吧。什么是 Python 的包与模块包的定义:简
2023-06-29

Python的os包与os.path模块怎么用

这篇文章主要介绍了Python的os包与os.path模块怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、os常用方法1.获取当前路径 os.getcwd()# co
2023-06-29

python之模块和包

1 模块化一般来说,编程语言中,库,包,模块是同一种概念,是代码组织方式 python中只有一种模块对象类型,但是为了模块化组织的便利,提供了一个概念: 包模块(module):指的是python的源代码文件 包(package):指的是模
2023-01-31

详解Python模块化--模块(Modules)和包(Packages)

目录引言Python Modules模块导入模块①导入整个模块②导入模块中的特定函数③导入模块中的所有函数给导入的模块一个别名单独运行模块加速模块加载Python Packages包引用包(Package)中的模块引用包(Package)中
2022-06-02

Python使用scapy模块发包收包

前言众所周知,我们每天上网都会有很多数据包需要发送,然后处理在接受在发送,这样一个循环往复的过程这里就显示了很多数据包的发送接收数据,那什么是包呢?下面一起看看 包( packet )是网络通信传输中的数据单位,一般称之为数据包,其主要由源
2022-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录