首页 > 编程语言 >19、python模块 模块的导入和使用

19、python模块 模块的导入和使用

时间:2022-10-18 17:12:13浏览次数:55  
标签:__ 文件 19 py python 导入 模块

目录

一、模块

1、简介

  • 本质:模块是指内部具有一定功能(代码)的py文件
  • 发展历史:
    • 前期:在python刚开始的时候其他编程语言都看不起python,认为python是’掉包侠‘
    • 后期:随着市场发展有更多人了解python,这时python‘掉包侠’的外号从贬义词变为了褒义词

2、模块的表现形式

  • 1、py文件(py文件也可以称之为是模块文件)
  • 2、含有多个py文件的文件夹(按照模块功能的不同划分不同的文件夹储存)
  • 3、已被编译为共享库或DLL的C或C++扩展
  • 4、使用C编写并链接到python解释器的内置模块

二、模块的分类

1、自定义模块

  • 此类模块是我们自己编写的模块文件

2、内置模块

  • python内置模块,不需要下载,只要在py文件内部调用就可使用

3、第三方模块

  • 是从网络上下载的模块,此类模块功能比较强大,是python背后的大佬进行编写,上传后供我们使用的模块

三、导入模块的句式

学前须知:

  • 1、执行文件:运行代码的主文件
  • 2、被导入文件:指存放模块的文件,需要导入在执行文件
  • 3、以后在编写代码时,py文件的名称一般是纯英文,不会含有中文或空格
  • 4、被导入的模块文件不需要填写后缀名

1、import句式

关键词:import
导入用法:
	import 模块名
    
优点:
	1、可以一次性导入所有模块名称空间中名字
	2、需要模块名加点的方式才能调用,不易弄混
缺点:
	1、必须要模块名加点的方式才能调用,比较麻烦
 
'''
底层原理:
	1、先产生执行文件的空间名称
	2、执行被导入文件的代码,将产生的名字放入被导入文件的名称空间中
	3、在执行文件的名称空间中产生一个模块的名字
	4、在执行文件中使用该模块名加点的方式使用模块名称空间中的所有名字
'''

2、from...import...句式

关键词:from...import...
导入用法:
	from 文件地址/文明名 import 文件名/名称空间名字
    
    
    from也可以通过*号的方式来导入所有模块内的名字
    在模块中可使用__all__的方式来限制*号导入名字,只有在__all__后方列表内的名字才能
被*号使用
     
    
'''
底层原理:
	1.先产生执行文件的名称空间
 	2.执行被导入文件的代码将产生的名字放入被导入文件的名称空间中
 	3.在执行文件的名称空间中产生对应的名字绑定模块名称空间中对应的名字
 	4.在执行文件中直接使用名字就可以访问名称空间中对应的名字
'''

优点:
	1、可以指名道姓的调用模块中需要的名字
缺点:
	1、调用时容易弄混

3、补充说明

  • 起别名
    • 可以通过以上两种句式在导入模块名的后方加as修改模块名

  • 一次性导入多个模块
    • 可以使用逗号的方式一次性导入多个模块,在模块功能相似度不高的情况下不推荐使用

四、循环导入问题

1、循环导入

  • 循环导入是指两个文件之间相互导入,并且相互使用各自名称空间中的名字

2、如何解决循环导入问题

  • 1、确保名字在使用前就已经准备完毕
    • 这种方式可能会出现代码循环执行多次的请款
  • 2、这种情况非常容易报错,在以后的使用当中,如果无特殊情况尽量避免这种情况发生

五、判断文件类型

	所有的py文件都可以运行 __name__ 运行后所对应的值是 __main__,但当我们运行的是导入文件时,系统则会返回给我们模块名
    
    我们在开发模块阶段,会使用模块名来测试模块的功能,如果直接使用名称调用的话,这样别人在导入模块后会直接使用模块中的名字,造成诸多不便,由此,我们可以得出,使用if设置条件来将名称作为子代码执行条件,这样模块被导入后就不会直接运行
    if __name__ == __ main__:
      	  	 测试名称1...
       		测试名称2...        
       		测试名称3...
'''
应用场景:
	1、模块开发阶段
	2、项目启动文件
'''

六、模块查找顺序

1、内存

  • 在导入模块时,python会首先在内存中查找模块名,当系统中无此模块名的时候会报错

2、内置空间

  • 在我们导入模块时要避免模块名和内置模块名冲突的问题,若自定义模块和内置模块名冲突时,系统只会执行内置模块功能,执行自定义模块功能时,系统会报错

3、执行python所在的sys.path(系统环境)

  • 1、当我们导入的模块在上述空间中都没有找到时,pycharm会到py执行文件所在的sys.path中寻找,所有我们在导入模块时,需要将添加至执行文件所在的sys.pach目录中!

  • 2、可通过打印sys.pach的方式来查看执行文件所在的地址

  • 3、可通过sys.pach.append的方式来将模块文件导入到执行文件的目录中

七、绝对导入与相对导入

1、绝对导入

绝对导入是指以执行文件所在目录为绝对路径的方式,将模块地址导入到py文件中

导入方式:

from 模块地址 import 模块名称/名称空间名字

2、相对导入

这种导入方式不是以sys.path目录为相对路径,导入的其他模块中需要导入的地址是相对于模块的位置,这种话方式可以通过点的方式简写

  • . # 表示当前目录
  • ... # 表示路径中上一层目录
  • .. \ .. # 表示上上一层目录

注意事项:在执行中无法使用相对导入,这种方式会式系统报错

八、包

  • 1、指含有多个py文件的集合
  • 2、专业:内部含有__ init__.py文件的文件夹(python2必须要求 python3无所谓)

标签:__,文件,19,py,python,导入,模块
From: https://www.cnblogs.com/kangssssh/p/16803264.html

相关文章

  • 模块
    Day17模块今日内容概要索引取值与迭代取值的差异模块简介导入模块的两种句式导入模块的句式补充循环导入问题及解决策略判断文件类型模块的查找顺序模块的绝对......
  • python 打包离线环境 pip安装
    1、有网并且网速快时:生成的依赖文件pipfreeze>requirements.txt在新环境直接pipinstall-rrequirements.txtpipinstall-rrequestment.txt路径--target=安装目......
  • linux 下GPRS模块使用sim900打电话发短信
    ————————————————————————————————————————————— 主机操作系统:Centos6.7开发板平台:FL2440 Linux内核版本:linux-3.0 开......
  • 最新CS RCE(CVE-2022-39197)复现心得分享
    0x01前言CS作为目前最流行的远控工具,其爆出的远程命令行漏洞CVE-2022-39197号称脚本小子杀手神器。之前看了@漂亮鼠大佬的文章《最新CSRCE曲折的复现路》,对文章的内容非常......
  • python实现计时器
    importtimeclassTimer:def__init__(self,func=time.perf_counter):self.elapsed=0.0self._func=funcself._start=None......
  • [GXYCTF2019]luck_guy
    1.就是说输了一串字符然后进了patch_me这个函数2.双击patch_mecase4是给f2赋值case5对f2操作case1是对f1f2进行了strcat操作然后他就是flag4.因此我......
  • Jmeter添加JSR223对Python的支持
    通过下载:org.python:jython-standalone:2.7.2-MavenCentralRepositorySearchjython-standalone-2.7.2.jar放置到\lib\ext下即可: 打开JSR223取样器即可选择pyt......
  • python常用库
    一、python爬虫常用库Python在编写网络爬虫常用到库主要包括urllib、requests、lxml、fake-useragent、bs4(BeautifulSoup)、grab、pycurl、urllib3、httplib2、RoboBrow......
  • 【Python】省略号(...)在Python中的三种用法
    https://blog.csdn.net/weixin_40908748/article/details/106252884https://zhuanlan.zhihu.com/p/489862322https://zhuanlan.zhihu.com/p/489862322 省略号(...)在......
  • app内部模块添加桌面快捷方式
       思路:     UIButton*ceshiBtn=[[UIButtonalloc]initWithFrame:CGRectMake(100,100,60,60)];  ceshiBtn.backgroundColor=[UIColorbl......