栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python-模块

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python-模块

学习内容概览
  • 迭代取值与索引取值差异
  • 模块简介
  • 导入模块的两种语法
  • 两种语法各个的优缺点
  • 导入模块的过程
  • 导入模块的补充知识
  • 循环导入问题
  • __name__内置名
  • 模块的查找顺序
一、迭代取值与索引取值的差异
"""
1. 索引取值
索引取值可以根据索引随意取出任意数据值
"""
l1 = [1, 2, 3, 4, 5]
print(l1[0])  # 1
print(l1[1])  # 2
print(l1[0])  # 1
"""
缺点是对于没有索引的无序数据类型无法取数据值
"""

"""
2. 迭代取值
迭代取值提供了一种通用的取值方式
"""
res = l1.__iter__()
print(res.__next__())  # 1
print(res.__next__())  # 2
print(res.__next__())  # 3
"""
缺点是无法控制取值方向,只能向下取值
"""
二、模块
  • 模块简介
    1. 怎么理解模块
      模块就相当于是将许多功能整合在一起的文件
      调用模块就可以使用文件中的各种功能
    2. 模块的分类
      1.内置模块
      解释器内自带的模块,可以直接调用
      2.自定义模块
      自己写的模块
      3.第三方模块
      别人写的模块,使用前需要下载
    3. 模块的表现形式
      1.py文件(py文件也可以被称为模块文件)
      2.含有多个py文件的文件夹(按照功能的不同分为不同文件夹)
      3.已被编译为共享库或DLL的c或C++扩展(了解)
      4.使用C编写并链接到python解释器的内置模块(了解)
  • 导入模块的两种语法
    """1. 使用import..."""
    import md
    md.fn()  # 使用模块名.名字的方式使用
    """2. 使用form...import..."""
    from md import fn
    fn()  # 直接调用
    
  • 两种语法各自的优缺点
    import md
    """
    优点:通过模块名.名字的方式调用模块的中的名字,不会与执行文件的名字冲突
    缺点:会导入模块中所有的名字
    """
    from md import fn
    """
    优点:只导入指定的名字,而且调用不用加上前缀
    缺点:使用方式和执行文件的名字相同,可能会产生名字冲突
    """
    
  • 模块导入的过程

    1.执行a.py文件,先创建a.py文件的名称空间
    2.执行import导入b模块,会使b模块文件先执行一遍
    3.执行b模块会创建b模块的名称空间
    4.然后将b模块执行完毕后产生的名字放入b的名称空间
    5.在a.py会产生一个b名字,绑定的就是b模块的名称空间,使用b.名字的方式调用b模块的名字
    如果使用from b import fn1 ,会直接在a.py产生同名的变量绑向b.py中的fn1绑向的值

  • 导入模块的补充知识
    1. 起别名
    	当导入的多个模块文件有相同名字,或模块名字复杂时
    	在在import导入后使用as加变量名起别名
    	然后使用别名.名字
    	import unicodedata as ucd
    2. 导入多个名字
    	import time, os, sys 
    	"""上边的导入方式除非是功能相似,不然建议分开导入"""
    	import time, datetime
    	import os
    	import sys
    3. 全导入
    	如果模块中有很多名字,而又想直接使用调用名字的方式
    	可以使用*号
    	from dm import *
    	*号表示导入所有名字
    	而在模块文件中也可以控制使用*号可以导入哪些名字
    	使用__all__ = [可以被导出的名字]来控制,列表中的名字是字符串格式		
    
  • 循环导入问题

    循环导入就是两个文件相互导入
    文件a:

    import b
    name = 'a'
    print(b.name)
    

    文件b:

    import a
    name = 'b'
    print(a.name)
    
    1. 运行a文件,先创建a的名称空间,然后执行代码
    2. 导入b模块,创建b的名称空间,然后执行代码
    3. 导入a模块,名称空间已经存在,直接执行代码
    4. 因为导入过b文件,不会在重复导入,所以继续往下执行
    5. 执行到打印b.name时,因为b还没有执行到赋值的代码所以名称空间没有名字,所以会直接报错

    解决方案:
    在赋值后再执行导入模块(循环导入要尽量避免出现)

  • __name__内置名

    开始使用模块以后,之后的程序可能不止是运行一个py文件
    如果有需要只在运行当前文件时才执行,而导入这个文件不执行的代码
    就可以使用到__name__了
    a.py:

    """在当前运行当前文件时,打印__name__是__main__"""
    name = __name__
    print(name)  # __main__
    

    b.py

    import a  # a  导入时会执行被导入文件代码
    print(a.name)  # a 返回的是被导入文件的文件名
    
    if __name__ == '__main__':
    一般在执行文件中使用上边的判断代码,在子代码中编写只有执行文件执行时才执行的代码
    
  • 模块的查找顺序
    1. 先在内存中查找
    2. 再在内置模块中查找
    3. 最后在sys.path中查找(程序系统环境变量)
    1.先导入一个模块,然后在执行文件过程中删除模块,发现还是能执行该模块中名字
    import md
    import time
    time.sleep(10)
    md.fn()
    2.先创建和内置模块同名的模块,发现调用的还是内置模块
    import time
    print(time.time())
    time.fn()
    3.导入模块时一定要知道谁是执行文件,所有的路径都是参照当前执行文件的路径的
    import sys
    print(sys.path)
    	"""
    [
    'F:\pythonProject\day20',
    'F:\pythonProject\day20',
    'F:\PyCharm 2021.3.3\plugins\python\helpers\pycharm_display',
    'F:\python\python39.zip',
    'F:\python\DLLs',
    'F:\python\lib',
    'F:\python',
    'F:\python\lib\site-packages',
    'F:\PyCharm 2021.3.3\plugins\python\helpers\pycharm_matplotlib_backend'
    ]
    """
    当在内存和内置中找不到对应的模块时,就会依次在上边的路径中查找
    如果上边的路径还是没有,而sys.path的返回值是一个列表,所以可以使用列表的内置方法追加一个需要导入模块的绝对路径,就可以导入指定模块了
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1011406.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号