一:模块的定义

  模块:就是一系列功能的集合体,分为三大类
  1.内置(就是解释器里自带的)
  2.自定义:可以是任何语言写的 (py文件本身就是一个模块,文件名叫xx.py,模块名就叫xx)
  3.第三方:既不是自带的,也不是自己写的,是别人的直接拿过来

  ps:模块分为四种形式
  1.使用python编写的py文件
  2.已被编译为共享库或是DLL的C或者C++扩展
  3.把一系列模块组织到一起的文件夹(__init__.py文件,该文件称之为包)
  4.使用C编写并链接到python解释器的内置模块

二:为何用模块

  1.内置与第三方的模块拿来就用,无需定义,这种拿来主义,可以极大的提升开发效率
  2,自定义的模块,可以将程序的各个部分功能提取出来放到一个模块中,为大家共同使用,这样减少了代码冗余问题,
  首次导入模块会发生:
    1,执行xx.py
    2,产生xx.py的名称空间,将xx.py运行过程中产生的名字都丢到xx的名称空间中
    3.在当前文件中产生的有一个xx,该名字指向2中产生的名称空间
    之后再导入,都是直接引用首次导入产生的xx.py名称空间,不会重复执行

三:如何引用

  1.模块名.名字,是指名道姓的问某一模块要名字对应的值,不会与其他名字产生冲突
  2.无论是查看还是修改操作的都是模块本身,与调用位置无关,以定义的时候为准

 

四:导入多个模块的书写规范

导入多个模块,可以用 , 分隔模块,但是不建议
import time,name,age
建议使用如下:
import time
import name
import age
导入模块时,先后顺序最好是:
    1.导入内置模块
    2.导入第三方模块
    3.导入自定义模块
    
============import......as.....
import  foo文件名 as 另起一个名字f  #  foo=f
f.get()
用在当我的模块名比较长的情况下
========自定义模块的命名应该采用纯小写+下划线的风格
=======可以在函数内导入模块

 

五:一个python文件的两种用途

1.被当成程序运行

2.被当作模块导入

如果foo文件下非得运行一下结果时:
当xxpy被运行时,__name__的值为'__main__',导它的文件则会把运行结果显示出来
当xx.py被当作模块导入时时,__name__的值为'xx',不会输出xx.py的运行结果
if ____name__=='__main__':
    get()    本文件内执行
    change()
else:
    只是被当作模块导入

六:import和from....import的两种导入方式

=======================import导入模块时的优缺点
1.优点:肯定不会与当前名称空间中的名字产生冲突
2.缺点:导入模块在使用时必须加前缀"模块.",加前缀显得麻烦
=========================from....import xx不加前缀的另一种方法 from foo import x # x=模块foo中值11的内存地址 from foo import func from foo import change ======================from....import...导入发生的三件事 1.产生一个模块的名称空间 2.运行foo.py将运行过程中产生的名字都丢到模块的名称空间取 3.在当前名称空间拿到一个名字,该名字指向模块名称空间中的某一个内存地址 get() ==============优缺点 1.代码更简洁 2.缺点:容易与当前名称空间的名字混淆 ====================================也可以一行导入多个模块(不推荐) from foo import x ,func,change =====================================from foo import*,就是所有模块当中的名字都可以用(不推荐,只有需要导入模块中的名字很多的时候使用) from foo import* print(x) print(func) print(change) ============================================也可以取别名 ,但是针对的是对import后面的名字过长时 from foo import func as f

 

七:循环引用产生的问题 

循环导入问题指的是在一个模块加载/导入的过程中导入另外一个模块,而在另外一个模块中又返回来导入第一个模块中的名字,由于第一个模块尚未加载完毕,所以引用失败、抛出异常
究其根源就是在python中:同一个模块只会在第一次导入时执行其内部代码,再次导入该模块时,即便是该模块尚未完全加载完毕也不会去重复执行内部代码
=======解决方法1:在共同被导入的模块当中,把被 引用到的名字全部放到最上面
=======解决方法2:放到一个函数体内,不要放到全局

==========================但是都不建议=======================================================

八:模块查找的优先级

1.内存(内置模块)
2.从硬盘找:也就是当前文件所在的位置(在哪个文件夹下)
import sys # 查找路径
print(sys.path) #值为一个列表,其中第一个就是当前执行文件所在的文件夹
# 被导入模块路径为'C:\\Users\\xx\\PycharmProjects\\pythonProject\\venv\\Scripts\\python36.zip',看后缀为zip

 

九:包(其实也是一个模块)

 。

======================相对导入,仅限于在包内使用,不能跨出包,(站在使用者角度)
.:代表当前文件夹
..:代表上一层文件夹

posted on 2024-04-27 20:38  认真的六六  阅读(19)  评论(0编辑  收藏  举报