关于python中模块和重载的问题


Posted in Python onNovember 02, 2021

模块和重载

简单来讲,任意一个以.py结尾的python文件都是一个模块。例如有A.py和B.py两个文件。在A中可以通过导入B来读取B模块定义的内容,导入操作本质上就是载入另一个文件。
基于模块的模型是python程序架构背后的核心思想。

一个大型python程序往往以多个模块文件的形式出现,并且从其它模块导入工具。但是通常会指定一个模块文件作为主文件(也叫顶层文件),该文件启动之后,就会运行整个程序。除了顶层文件之外的其他文件都是导入模块。

导入操作将会导致模块中的代码被运行,因此导入文件也是一种运行python文件的方法。 模块文件只有第一次被导入的时候会被执行,之后就不会被执行。如下图所示:

关于python中模块和重载的问题

如果你想在同一个python会话中,多次运行模块文件,你需要调用importlib模块的reload方法(reload方法在python2中是内置方法,在python3中需要从importlib模块中导入)。如下图所示:

关于python中模块和重载的问题

reload函数载入并运行了代码,如果你对reload载入的代码做过修改,那么下一次reload将会载入修改过的代码。如下图所示:

关于python中模块和重载的问题

注意,reload函数使用的前提是之前import过该模块,否则会报错。
因为reload希望获得的参数是一个已经被导入过的模块名称。
reload函数是不传递的,也就是说你重载了A文件,A文件中导入的模块不会被重载。

关于python中模块和重载的问题

导入和重载提供了一种自然的程序启动选项。模块其实起到了一个命名空间的作用。而模块中的变量就是属性。

导入模块可以使用import也可以使用from。它们之间是有一定的差别的,from是复制了模块的属性,使得属性成为该文件的直接变量。这时候你就能直接使用该属性。例如:

关于python中模块和重载的问题

使用load模块的属性a,需要使用object.attributu的方式来使用。而b是通过from方法导入的,则不需要,因为from将b复制到了该文件中,而不是依旧存在于load这个命名空间。

无论是import还是from导入文件,都不需要加python文件扩展名.py,如果你一不小心加上了,那么会报错。

模块与命名空间

每个模块都是自包含的命名空间,一个模块文件无法获得另一个模块文件中的变量,除非它显示的导入那个文件。每一个模块都是一个独立的命名空间。

到此这篇关于关于python中模块和重载的问题的文章就介绍到这了,更多相关python 模块和重载内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python 动态获取当前运行的类名和函数名的方法
Apr 15 Python
跟老齐学Python之赋值,简单也不简单
Sep 24 Python
python实现调用其他python脚本的方法
Oct 05 Python
用Python编写分析Python程序性能的工具的教程
Apr 01 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
Dec 12 Python
Django中使用Celery的教程详解
Aug 24 Python
Python 实现「食行生鲜」签到领积分功能
Sep 26 Python
python原类、类的创建过程与方法详解
Jul 19 Python
python解压zip包中文乱码解决方法
Nov 27 Python
一行代码python实现文件共享服务器
Apr 22 Python
python实现简单聊天功能
Jul 07 Python
Python进行区间取值案例讲解
Aug 02 Python
pandas中对文本类型数据的处理小结
Nov 01 #Python
Python游戏开发实例之graphics实现AI五子棋
Python Django获取URL中的数据详解
Nov 01 #Python
python编程项目中线上问题排查与解决
Nov 01 #Python
python实现层次聚类的方法
Python list列表删除元素的4种方法
Nov 01 #Python
Python面向对象编程之类的概念
Nov 01 #Python
You might like
coreseek 搜索英文的问题详解
2013/06/08 PHP
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
php使用pdo连接mssql server数据库实例
2014/12/25 PHP
php通过两层过滤获取留言内容的方法
2016/07/11 PHP
PHP实现页面静态化的超简单方法
2016/09/06 PHP
基于thinkPHP框架实现留言板的方法
2016/10/17 PHP
php使用str_shuffle()函数生成随机字符串的方法分析
2017/02/17 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
2019/04/02 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
在thinkphp5.0路径中实现去除index.php的方式
2019/10/16 PHP
Yii框架getter与setter方法功能与用法分析
2019/10/22 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
JavaScript学习笔记(十)
2010/01/17 Javascript
jQuery中获取checkbox选中项等操作及注意事项
2013/11/24 Javascript
滚动条响应鼠标滑轮事件实现上下滚动的js代码
2014/06/30 Javascript
jquery分隔Url的param方法(推荐)
2016/05/25 Javascript
每个程序员都需要学习 JavaScript 的7个理由小结
2016/09/03 Javascript
JS常用加密编码与算法实例总结
2016/12/22 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
解决IE7中使用jQuery动态操作name问题
2017/08/28 jQuery
全面介绍vue 全家桶和项目实例
2017/12/27 Javascript
vue双向绑定及观察者模式详解
2019/03/19 Javascript
解决layUI的页面显示不全的问题
2019/09/20 Javascript
vue使用keep-alive实现组件切换时保存原组件数据方法
2020/10/30 Javascript
[01:17]Ti4 循环赛第一日回顾
2014/07/11 DOTA
[09:37]2018DOTA2国际邀请赛寻真——不懈追梦的Team Serenity
2018/08/13 DOTA
Python简单实现socket信息发送与监听功能示例
2018/01/03 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
Python中实现变量赋值传递时的引用和拷贝方法
2018/04/29 Python
Django中使用 Closure Table 储存无限分级数据
2019/06/06 Python
Python从文件中读取指定的行以及在文件指定位置写入
2019/09/06 Python
python使用matplotlib绘制折线图的示例代码
2020/09/22 Python
波兰化妆品和护肤品购物网站:eKobieca
2019/08/30 全球购物
房屋财产继承协议书范本
2014/11/03 职场文书
消防宣传标语大全
2015/08/03 职场文书
利用Python实时获取steam特惠游戏数据
2022/06/25 Python