进入python的世界_day17_python基础——了解模块、如何使用和导入模块、包的原理

news/2024/5/14 14:44:40/文章来源:https://www.cnblogs.com/wznn125ml/p/16803731.html

一、模块介绍

1.什么是模块

​ 其实我们前一阵已经接触过了,import xxx 、from xx import xxx

​ 能够有一定功能的集合体就是模块,比如有某些功能的py文件,包含这个文件的文件夹

​ python之所以流传的这么广有很重要一个因素就是模块非常丰富,社区活跃,干活效率高

2.模块的分类

  • 内置模块

    ​ >>>pycharm准备好了的

  • 第三方模块

    ​ >>>行业大佬写的,我们可以拿来使用里面的功能

  • 自定义模块(自创模块)

    ​ >>>自己写的python文件,.py文件就是一个模块

3.好处

  • 能极大的减少代码的冗余,使结构更清晰
  • 能提升写代码的效率

二、怎么用模块

​ 只要运行文件,必然会涉及到名称空间来存放名字,可以在全局导模块,也可以在局部导模块

1.import 导入模块名字

​ 比如说有一个叫a的py文件(a.py),那模块名就是a

​ 模块的名称空间和执行文件的名称空间的关系图我们来画一下

​ !!!注意是首次哦,之后的导入不会再产生新的名称空间,没必要

​ 因为模块点名字是指名道姓,如果执行文件A本身自己也有某名字,当在执行文件A内调用自身的变量名,不受模块的影响,就算模块那边用了破界函数关键字声明,也不会影响到执行文件A这边的名称空间

​ 执行文件的相同变量名和模块文件的相同变量名是指向关系,模块改不会影响执行文件,是如果再调用模块中的被改过变量名,会得到模块中变量名对应的最新的数据值

​ 如果要导入多个模块,推荐用:

​ import time

​ import func

​ import a

​ 这种格式为好

2.import 导入模块拓展

​ 如果导入模块名字不好认或者太长,可以拿一个变量名接受这个调火来的内存地址,这样以后直接变量名点也是一样的使用

​ 例:import hihihihihihihi as t

​ t.xxx = hihihihihihihi.xxx

3.from import导入模块名字

​ import必须加前缀才能调用模块的名称,所有有一种针对模块某一名称的导入方法

​ from...import...

  • 缺点:

​ 容易名称混淆

三、循环导入

  • 首先,不应该让两个模块相互导入,因为某模块导入一次后Python就不会再次理会导入,如果导入完毕时变量名未产生,那就不会产生名称空间,循环导入就会报错

  • 如何解决:

    ​ 1.把变量名赋值代码上移到导入模块代码前(提前准备好名字,产生好名称空间)

    ​ 2.造一个函数,利用函数不调用不执行代码的特点——只针对一个函数用到的前提

四、判断文件类型

1.缘由

​ 模块作者在写模块时,也想测测自己模块的功能,比如一些函数,如果在自己模块文件中直接写函数名(),自己看确实没问题,但是别人导入这个模块时,就会也跑一次函数名执行,会干扰别人的执行文件功能,所以就有一个内置函数功能,可以判断当前文件是本身还是被调用

2.用法及pycharm优化

__name__
如果是自身,打印后会反馈__main__
如果是被导入,打印后会反馈模块名字可以把自己想测试的代码丢入到判断文件类型的条件的子代码下去
if __name__ == '__main__':func()....
else:pass
pycharm优化:顶格敲一个main,就会自动补全if __name__ == '__main__':
main = "if __name__ == '__main__':"

五、模块的查找顺序

​ 是文件一定有存放的路径,所以就来捋捋查找的优先级

!!!一定要清楚谁是执行文件,谁是被导入文件

优先级:

​ 1.内存

​ 如果调一次完成了,会暂存在内存中,在再次执行调用前把模块删除了,可以再执行一次,然后会被释放,再导会报错

​ 2.内置模块

​ 3.文件夹找

​ >>>按照sys.path中存放的文件的顺序依次查找

  • sys模块

    	执行文件都可以调用sys,打印一下sys.path可以查看执行文件所在的系统环境
    

    如果模块和执行文件不在一个文件夹内:

    ​ import sys

    ​ sys.path.append(r'想加的模块的文件夹的路径')

    ​ 就可以使用了

就可以了>>>>

六、包

1.定义

就是一个包含有__inin__.py文件的文件夹
本质就是一个模块
python2必须要求__inin__.py文件 python3无所谓
如果导包的名字,就是在导__inin__

七、模块的导入(绝对导入、相对导入)

一个例子:如果一个模块开发者,有一个模块,功能很多,不想后期自己维护太乱,可以把每个功能单独拎出来做一个模块,然后用一个包包住,在__init__.py文件中把包路径下的文件导入一下即可,包的名字用以前模块的名字,这样日后使用这个个包的人不会察觉到原模块已经变成包了

绝对导入:以包的文件夹路径来导入(基于执行文件的根目录)

相对导入: .在路径中表示当前目录
..在路径中表示上一层目录
....在路径中表示上上一层目录
不在依据执行文件所在的sys.path 而是以模块自身路径为准
from . import b
相对导入只能用于模块文件中 不能在执行文件中使用

  • 拓展:

  • 导入模块书写的规范

    ​ 1内置模块

    ​ 2第三方模块

    ​ 3自创模块

  • 自定义模块命名推荐用纯小写+_的风格

  • from a import *  *默认是将模块名称空间中所有的名字导入
    被导入模块会默认有一个__all__  = []的列表,列表里面存所有的名称
    __all__  = ['名字1', '名字2']  针对*可以限制拿的名字
    ——————————————————————————————————————————————
    大多数情况不会用,太容易混淆
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_25437.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文快速上手Vue之计算属性和侦听器,过滤器

计算属性和侦听器 1、计算属性&#xff08;computed&#xff09; 某些结果是基于之前数据实时计算出来的&#xff0c;我们可以利用计算属性。来完成 示例&#xff1a; <div id"app"> <ul> <li>西游记&#xff1a;价格{{xyjPrice}}&#xff0c;…

【设计模式】责任链模式,让程序员摆脱乱糟糟的零散的代码

函数式编程是一种思维模式。该使用什么样的方式去解决你的问题?就像你不想去破解一个代码块完整性(内聚),那么你可以加入一个切面,去影响该代码块的执行结果。以函数方式思考。对于一个业务逻辑,如果以函数的角度思考,那么可以抽离出若干的函数进行处理,而非乱糟糟的零…

socket编程—UDP套接字

socket编程—UDP套接字一、UDP套接字socket函数的参数socket&#xff08;&#xff09;函数返回值1、服务端创建套接字绑定端口提供服务2、客户端创建套接字一、UDP套接字 IP是标识互联网当中的唯一一台主机 端口号是标识一台主机内的唯一一个进程 两者相加就是标识互联网当中唯…

245 - 转换流

1、转换流&#xff1a; InputStreamReader , OutputStreamWriter 【1】转换流&#xff1a;作用&#xff1a;将字节流和字符流进行转换。 【2】转换流 属于 字节流还是字符流&#xff1f; 属于字符流 InputStreamReader &#xff1a;字节输入流 —> 字符的输入流 Outp…

Odoo | 页面视图的跳转逻辑

目录前言页面跳转的流程及逻辑点击后进入 call\_botton方法&#xff0c;验证先检查method方法名。内置方法&#xff0c;检查方法名&#xff0c;如果是私有方法&#xff0c;提示错误。方法名合法之后进入call\_kw方法&#xff0c;检查api的值。获取一些系统的上下文&#xff0c;…

【3D游戏建模全流程教学】使用3dmax制作教堂场景

本文分享了使用3dmax制作教堂场景的流程&#xff0c;并解释V-Ray的渲染过程。 01场景制作 在网站中收集许多的参考图像&#xff0c;然后使用平面、立方体和圆柱体等基本形状来制作场景。再制作基础照明以了解场景的构图和总体外观&#xff0c;从视口制作预览动画。 下一步是创…

计算机体系机构的发展

40年代&#xff0c;当时的 计算机是采用什么样的方式来工作的&#xff0c;比如是不是采用存储程序的方式还是采用程序控制的方式&#xff0c;最典型的是第一台计算机他是采用硬件互联的方式实现的&#xff0c;第一台采用存储程序的计算机时ENIAC 60年代&#xff0c;人们更关注…

Vue中的数据代理

什么是数据代理 数据代理&#xff1a;通过一个对象代理对另一个对象中属性的操作(读/写)。 想要更加深刻的理解什么是数据代理&#xff0c;就必须先了解JS中对象的一个方法&#xff1a;Object.defineProperty()&#xff0c;数据代理主要使用Object.defineProperty()的第三个参数…

构建性能测试知识体系

转载:https://mp.weixin.qq.com/s?__biz=MzkwNTI2NjAxMA==&mid=2247484048&idx=1&sn=6700370d90c5c5ceae2729297f6e8ef4&chksm=c0fb14a5f78c9db3ae1bd31e50a1253a95d2a97ae1888ee22025d0c5bed4bd86a63599dd36cb&scene=178&cur_album_id=233153993986…

《对线面试官》| 高频 Redis 面试题(上)

目录前言百分之99面试官都爱问的 Redis 面试题1、谈下你对 Redis 的了解2、Redis适用于哪些场景&#xff1f;不适用于哪些场景&#xff1f;3、Redis 支持的数据类型有哪些&#xff1f;4、既然Redis是单线程架构&#xff0c;但为什么这么快&#xff1f;5、什么是缓存穿透&#x…

星巴克急了,瑞幸就稳了?

&#xff08;图片来源于网络&#xff0c;侵删&#xff09; 文|螳螂观察 作者|易不二 新消费下行&#xff0c;但咖啡赛道却异常拥堵。 Manner正在不亦乐乎玩联名、Tims中国进入上市倒计时、茶颜悦色挤进了咖啡市场、幸运咖开始反攻一线...... 跨界的玩家们就更是从四面八方…

【Shell篇三】Shell数组

文章目录一、Shell数组的定义二、Shell数组的常用操作三、Shell数组的增删改查四、Shell数组的遍历一、Shell数组的定义 Bash Shell只支持一维数组定义时使用圆括号&#xff0c;元素用空格分开初始化数组时不需要定义数组的大小 eg: array(A 1 B "C" 3) array2()也…

voron 2.4 皮带张紧度调节

相关视频 【浅谈一下Voron2.4打印机,让入门者有个清晰的定位和了解】https://www.bilibili.com/video/BV1KL4y1N76C?share_source=copy_web&vd_source=4df36574d866076e5078105782af91de Z轴AB轴

(01)ORB-SLAM2源码无死角解析-(64) BA优化(g2o)→闭环线程:Optimizer::OptimizeSim3→Sim3变换优化

本人讲解关于slam一系列文章汇总链接:史上最全slam从零开始&#xff0c;针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析-接如下: (01)ORB-SLAM2源码无死角解析-(00)目录_最新无死角讲解&#xff1a;https://blog.csdn.net/weixin_43013761/article/details/123092196 文末正…

白名单里的蓝桥杯“计算思维”竞赛到底考啥,有啥用处?

可能很多人都已经知道了&#xff0c;教育部公布的《2022-2025学年面向中小学生的全国性竞赛活动名单》正式宣告了&#xff0c;蓝桥杯全国软件和信息技术专业人才大赛成为了白名单比赛中的一员了。 而根据蓝桥杯的竞赛说明&#xff0c;2023年4月15~16日&#xff0c;以及4月22~2…

微信对接百度实现文字识别OCR

微信对接百度实现文字识别OCR 前置基础条件&#xff1a; ①注册测试账号 ②开通自己的测试公众号 ③完成与微信互发消息 ④完成自定义菜单栏 详细步骤&#xff1a;https://blog.csdn.net/weixin_45565886/category_12059118.html 1 获取到百度文字识别API ①注册百度智能云账…

Tomcat修改端口、添加域名访问

一、修改改端口 1、修改默认访问端口8080,改为80 # vim /usr/local/tomcat/conf/server.xml (路径是自己的安装目录)<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding=&…

spring 原理解析

spring 要解决的问题 1.spring 是如何创建一个bean对象的 bean对象其实就是一个实例 无非通过一些当时来丰富这个对象的内容 典型的就是aop和依赖注入 spring在通过构造方法创建一个实例对象后 就进入一个aop的阶段&#xff0c;这个阶段来实现属性 参数的依赖注入&#xf…

自然资源部第三地理信息制图院与Bigemap强强联手,共同推动多元化新GIS应用

近日&#xff0c;成都比格图数据处理有限公司(以下简称&#xff1a;Bigemap)与自然资源部第三地理信息制图院正式达成战略合作&#xff0c;未来双方将共同推动"基于矢量、影像、地形、实景三维等GIS数据在行业上的深化应用及国产化替代"合作。 自然资源部第三地理信…

小程序技术可助力智慧医疗企业破茧突围?

智慧医疗作为充分应用计算机技术、信息技术建立的新型医疗方式&#xff0c;正随着新一代信息技术的普及和医疗健康领域需求的变化迎来爆发期。智慧医疗作为充分应用计算机技术、信息技术建立的新型医疗方式&#xff0c;正随着新一代信息技术的普及和医疗健康领域需求的变化迎来…