7/13课上内容整理

178 阅读5分钟

迭代器和索引取值的区别

* 索引取值 
l1=[11,22,33,44,55,66]
peint(l1[0])
print(l1[1])
print(l1[0])
* 迭代器取值
res=l1.__iter__
print(res__next__())
print(res__next__())
print(res__next__())
索引取值:它可以随意取任意的值,但是针对无序的类型就不可以了。
迭代:提供了一种通用的取值方式,但是一旦开始就无法回头。

模块简介

* 模块如何理解:可以把模块看成是一系列功能的结合体,在使用这个模块的时候我们就相当于拥有了这个结合体全部的功能。
* 模块的分类
   内置模块:python自带的  直接可以使用的模块
    import time
    time.sleep(5)
   自定义模块:就是自己写的模块
    比如注册功能  登陆功能
   第三方模块:就是别人写好的  放在网上自己去下载然后进行使用的
   图形识别  图形可视化  语音识别、
* 模块的表现形式
  1 py文件 (也是可以称为模块文件)
  2 含有多个不同功能的py文件 
  3 已经被编译为共享库或DLL的c或c++扩展
  4 使用c编写并连接到python解释器的内置模块

导入模块的两种方式

 在以后真正的项目中所有的py文件名称都是英文没有其他的表达方式 相编号和中文都是不存在的。py文件被当作模块导入的时候不需要考虑后缀
* 导入模块的句式1  import
 import md
 执行的文件是   正在执行的文件
 导入模块的文件是  md.py
会产生执行文件按的名称空间
产生被导入文件按的名称空间并运行该文件内所有的代码存储名字
在执行文件种会获取一个模块的名字 通过名字+.的方式就可以使用到被导入文件名称空间中的名字
* 当同一个程序反复导入相同的模块  导入的语句只能只能执行一次
money = 100
print(md.money) 999
print(money)   100

image.png

 * 导入模块句式2  from...import...句式
   from md import money   这里就是指名道姓的导入  
   print(money)  999   、
   money=888
   print(money)  888
   print(read1)
   print(md.read1())
   from md import monye,read1
   read1()
   1 创建执行文件的名称空间
   2 创建被导入文件的名称空间
   3 执行被导入文件中的代码 将产生的名字存储到被导入文件按的名称空间中
   4 在执行文件中获取到指定的名字  指向导入文件的名称空间
   

image.png

两种句式导入的优缺点

import md 
    优点:通过md+.的方式可以使用到模块内所有的名字  而且也不会有冲突
    缺点:md什么都可以点 
from md import money,read1
    优点:直接是指名道姓的使用 并不需要加模块的前缀
    缺点:两者容易产生冲突而且绑定的关系也被修改了
   

补充知识

* 起别名
当很多个文件名相同并有多个人写
from md import money as md_my
from md import money as md1_my
print(md_my)
print(md1_my)
在后面加上as再将想修改的名字写在后面
当原有的文件名比较复杂时
也是同样的操作
from mdddddddddd import as md 
* 导入多个名字
import tinme,sys,os 
这样的多名字导入只有在模块功能非常相似的时候  如果不相似还是分开写
import time
import sys
import os

from md import money,read1,read2
这样使用时可以的  因为很多的名字都是一个模块文件的
* 全导入
* 需要使用模块中的很多名字时只能使用指定方式  from...import句式
from md import *  这里的* 表示所有的意思
对* 号导入也可以控制名字的数量 在模块里使用__all__=[字符串的名字]控制* 能够获取的名字

循环导入的问题

  • 循环导入就是将两个文件互相导入
  • 循环导入容易出现报错现象,使用两者的名字可能是在没有准备好的情况下就使用了
  • 在使用两者名字之前就要准备好 这样才能避免出现保存现象

判断文件类型

* 在以后的程序运行中可能涉及到的文件不止一个
* 所有的py文件都自带一个__name__内置名
    当py文件时执行文件时__name__的结果时__main__
    当py文件是被导入文件的时候__name__的结果时模块名也就是文件名
* __name__主要__用于开发者测试自己的代码使用
 if __name__=='__main__':
 当文件是执行文件时才会执行if的子代码
   

模块的查找顺序

* 可以先去内存中查找
* 再去内置中查找
* 再去sys.path中查找(程序系统环境变量)
* 导入一个文件然后在导入过程中删除该文件 还是可以使用
  import md 
  import time
  time.sleep(15)
  print(md.money)
  在这个过程中让利用时间戳让电脑休息了15秒将py文件删除后还是可以运行并且不会报错 如果不利用时间戳则会报错
* 创建一个跟内置模块相同的文件名
 import time
 print(time.time())
 from time import name
 print(name)
 这个过程中使用了与内置模块相同的名字导致报错
* 导入模块时要知道谁是执行文件
import sys
sys path.append(py文件路径)
import mdd 
print(mdd.name)
要看清文件所在上一级的文件的路径 如果上一级还有一级那就要把路径写到目标文件那里
* 通用的方式:sys.append(目标文件所在的路径)
* 利用from...import句式   最开始的位置一定是执行文件所在的路径
from xxx import mdd