首页 > 其他分享 >模块与导包

模块与导包

时间:2022-10-18 19:14:37浏览次数:58  
标签:文件 name py 导入 导包 模块 import

索引取值与迭代取值的差异

索引

索引可以重复取值,任意位置取值

不支持无序类型的数据取值

迭代取值

迭代取值只能按照,迭代器内部顺序依次取值

支持所有类型的数据取值

两者的使用需要结合实际应用场景

模块简介

模块的本质

py文件内含义功能代码

python模块的历史

​ python刚开始的时候所有搞其他编程语言的程序员都看不起 甚至起外号叫 调包侠

​ 随着时间的发展项目的复杂度越来越高 上面那帮人也不得不用python 然后就是真香定律

python模块的表现形式

​ 1.py文件 py文件也可以称之为是模块文件

​ 2.含有多个文件的文件夹(按照模块功能的不同划分不同的文件存储)

​ 3.已被编译为共享库或DLL的c或C++扩展

​ 4.使用C编写并连接到python解释器的内置模块

可以使用一行代码实现非常多大的功能

模块的分类

内置 python解释器自带

自定义 直接写的

第三方 别的大佬写的

导入模块的两种局式

'''
强调:
	1.一定要搞清楚谁是执行文件 谁是被导入文件
	2.以后开发项目的时候py文件的名称一般是纯英文
	项目规范 不要有中文 甚至空格
	3.导入模块文件不需要填写后缀名
'''
句式
1.
import  模块名
	"""
	1.先产生执行文件的命名空间
	2.执行被导入文件的代码将产生的名字放入被导入文件的名称空间中
	3.再执行文件的名称空间中产生一个模块的名字
	4.再执行文件中使用该模块名点的方式使用模块名称空间中的所有名字
	
	"""


2.
from 模块名 import 功能
以from a import name,func1 为例研究底层发生了什么
"""
	1.先产生执行文件的命名空间
	2.执行被导入文件的代码将产生的名字放入被导入文件的明治空间中
	3.再执行文件的名称空间中产生对应的名字绑定模块名称空间中对应的名字
	4.在执行文件中直接使用名字就可以访问名称空间中对应的名字
"""

image

image

image

导入模块补充说明

1.import 与from ... import ...两者优缺点
	import句式
    	由于使用模块名称空间中的明治都需要模块名点的方式才可以用
        所有不会轻易的被执行文件中的名字替换掉
        但每次使用模块名称空间中的名字都必须使用模块名点才可以
    from ... import ... 句式
    	指名道姓的导入模块名称空间中需要使用的名字 不需要模块点名
        但是容易跟执行文件中名字冲突
        
2.重复导入模块
多层导入只会导入一次 后续重复的导入语句并不会执行、
3.起别名
	import zhangshangao as zs
    from zhangshangaoji import kaigao as g,func1 as f1

4.涉及到多个模块导入
	import a
    import zhangshangao
    如果模块功能相似度不搞 推荐使用第一种相似度高可以使用第二种
    
    import a,zhangshangao



循环导入问题

两个模块互相导入调用

1.循环导入
	两个文件之间彼此导入彼此并且相互使用各自名称空间中的名字 极容易报错
2.如何解决循环导入问题
	1.确保名字在使用之前就已经尊卑完毕
    2.我们以后再编写代码的过程中应该尽可能避免出现循环导入
#a.py

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

#b.py

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

image

这样会报错,因为找到不到name

修改

#a.py

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

#b.py


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

image

判断文件类型

python2看看是否有_init_.py文件夹内没有的话python2不认为是或者模块包

python3则没有这么多规则,只有py文件有功能代码就是模块

if __name__ == '__main__':
    print('执行文件,可以执行')
    
上述脚本可以用来区分所在py文件内python代码的执行

使用场景
	1.模块开发阶段
    2.项目启动文件

    
"""
from a import * *默认将模块名称空间中所有的名字导入
__all__ = ['名字1','名字2'] 针对*可以限制拿的名字
"""
    

模块的查找顺序

先查找内存

然后内置

	自定义模块名字尽量不要与内置模块名冲突

然后执行文件所在sys.path(系统环境变量)
	一定要以执行文件为准
    可以将模块所在路径也添加到执行文件的sys.path 中即可
    import sys
    print(sys.path)  # 列表形式
    
    sys.path.append(文件路径)
    

绝对导入与相对导入

绝对导入
'''
再次强调:一定要分清楚谁是执行文件
	模块的导入全部以执行文件为准

'''

from src .ccc import name
就是按照项目根目录一层层往下查找
相对导入

再linux中

	.表示当前文件目录

	.. 表示上一级目录

	..\..表示上上一级目录
    不在已经执行文件所在的sys.path 而是以模块自身路径为准

from .src.ccc import name 
	相对导入只能用于模块文件中 不能在执行文件中使用
    """
    相对导入使用频率较低 一般用绝对导入即可 结构更加清晰
    """

白话:多个py文件的集合 文件夹

专业:内部必须含义__init__.py文件的文件夹
python2必须要求 python3 无所谓

标签:文件,name,py,导入,导包,模块,import
From: https://www.cnblogs.com/clever-cat/p/16803685.html

相关文章

  • python模块
    今日内容概要索引取值与迭代取值的差异模块简介导入模块的两种句式导入模块的局势补充循环导入问题及解决策略判断文件类型模块的查找顺序模块的绝对导入与相对......
  • 模块简介
    今日内容概要索引取值与迭代取值的差异模块简介导入模块的两种语法句式模块循环导入问题解决策略判断文件类型模块查找顺序模块的绝对导入与相对导入1.索引取值......
  • 循环导入、文件类型、模块查找、包
    索引取值与迭代取值的差异l1=[11,22,33,44,55]1.索引取值 可以任意位置任意次数取值不支持无序类型的数据取值2.迭代取值 只能从前往后依次取值无法后退......
  • 模块的初识
    今日内容概要索引取值与迭代取值的差异模块简介导入模块的两种句式导入模块的句式补充循环导入问题及解决策略判断文件类型模块的查找顺序模块的绝对导入与相对导......
  • day17模块基础简介
    目录索引取值与迭代取值的差异模块简介模块的分类导入模块的两种句式导入模块补充说明循环导入问题判断文件类型模块的查找顺序绝对导入与相对导入包索引取值与迭代取值的......
  • 模块导入的句式、模块的查找顺序
    今日内容回顾目录今日内容回顾索引取值和迭代取值的差异模块简介导入模块的两种句式导入模块的补充循环导入问题判断文件类型模块的查找顺序绝对导入与相对导入包package......
  • 10月18日内容总结——索引取值和迭代取值的差异、模块
    目录一、索引取值和迭代取值的差异二、模块1、简介1.模块的本质2.模块的历史3.python模块的多种表现形式2、模块的分类3、导入模块的两种语法格式1.import模块名2.from名......
  • python基础:模块简介、模块的语句、绝对导入和相对导入
    python基础:模块简介、模块的语句、绝对导入和相对导入目录一、索引取值与迭代取值的差异二、模块简介三、模块的分类四、导入模块的两种句式1.import句式2.from...import......
  • 模块
    模块py文件都可以被导入或者导入其他py文件,而内部具有一定的功能(代码)的py文件就是模块的一种。python最初因为模块被称之为调包侠,因为程序员觉得python调模块太简单不够......
  • sys.path和模块搜索路径
    当我们导入某个模块文件时,python解释器去哪里找这个文件呢?只有找到这个文件才能读取、装载运行该模块文件。它一般按照如下路径寻找模块文件(按照顺序寻找,找到即停不继续往下......