python学习Day22

Day 22

今日内容概要

  • 迭代取值与索引取值的差异
  • 模块简介
  • 导入模块的两种语法句式及优缺点
  • 模块的重要补充知识
  • 循环导入问题
  • 判断文件类型
  • 模块的查找顺序

今日内容详细

1.迭代取值与索引取值的差异
索引取值 迭代取值
优点 可以反复获取任意数据值 提供了通用的取值方式
缺点 针对无序容器类型(字典、集合)无法取值 取值一但开始,只能往前不能回退

​ 具体使用哪个需要结合实际情况

2.模块的简介
'''
python屈辱史:
	python刚出来时被瞧不起因为太简单,写代码都是调用模块(调包侠 贬义)
	后来业务扩展很多程序员也需要使用python写代码,发现好用(调包侠 褒义)
python为什么好用?
	因为支持python的模块非常多还很全面

	作为python程序员将来接收到业务需求时不要一上来就想自己写,先看看有没有相应的模块已经实现可以调用
'''
1.什么是模块
	模块可以看成是很多功能的结合体,使用模块就相当于拥有了结合体内所有的功能
   ps:使用模块编程就相当于站在巨人的肩膀上,基于别人的成就去完成自己的成就
2.模块的分类
  1)内置模块#解释器自带可以直接使用的模块
    eg:
     import time
     time.sleep(3)
  2)自定义模块#自己写的模块
	eg:
      注册、登录功能
  3)第三方模块#别人写的模块 在网上下载的
	eg:
      图形识别、图像可视化
3.模块的表现形式
  1)py文件(也称之为模块文件)
  2)含有多个py文件的文件夹
  3)(了解)已被编译为共享库或DLL的c或c++扩展
  4)(了解)使用c编写并链接到python解释器的内置模块
3.导入模块的两种句式及优缺点
补充说明:
	1)以后真正的项目中所有py文件名称都是英文,没有中文和序号。
    2)py文件被当作模块导入的时候不需要考虑后缀
1)导入模块的句式1:import句式
    '''
    import md
     1.会产生执行文件的名称空间
     2.执行被导入文件(模块文件)的名称空间并运行该文件内的所有代码 存储名字
     3.在执行文件中会获取一个模块的名字 通过该名字点的方式就可以使用被导入文件名称空间中的名字
    
    补充说明:同一个程序反复导入相同的模块 导入语句只会执行一次
    	eg:
    	   import md 有效
    	   import md 无效
    	   import md 无效
    '''
 eg:
    import md #我是模块文件md.py   导入执行md.py文件中的代码(不包括函数)
    print(md.money) #99 打印md模块中的money
    print(md.read1) #<function read1 at 0x000002CF8523A4C0> 打印函数名不执行(加括号才会执行,且会有返回值)
    md.read1() #执行md模块中的read1()函数体代码(没返回值)
    
2)导入模块的句式2:from 模块文件 import 名字 #执行该模块中的代码(不包括函数)在该模块中单独拿一个名字出来(指名道姓的导入)。如需多个名字则逗号隔开
'''
from md import money
1.创建执行文件的名称空间
2.创建被导入文件的名称空间
3.执行被导入文件中的代码,将产生的名字存储到被导入文件的名称空间中
4.在执行文件中获取到指定的名字,该名字指向被导入文件的名称空间
'''
eg:
   from md import money#我是模块文件  执行md模块中的代码(不包括函数),单独拿一个名字出来
   print(money)#99 模块中money绑定的值
——————————————————————————————————————————————————————————————
   from md import money,read1
   read1()#可直接执行md模块文件中read1函数
import md from md import money,read1
优点 通过md点的方式可以使用到模块内所有的名字,且不会冲突 指名道姓的使用指定名字,且不需要加模块前缀
缺点 md什么都可以点,有时候不想让所有的名字都能被使用 名字很容易产生冲突(绑定关系被修改)
5.模块的重要补充知识
1.起别名
	1)情况1:多个人写的模块文件名相同
    	假如有两个模块文件中都有money,当我打印时只会打印离打印最近的模块中的数据,如果两个都要用则需要把其中一个改名字
        from md import money as m#把第一个md模块名改为m
        from md1 import money 
        print(m)#改名前模块m中money数据
        print(money)#未改名的模块md1中money数据
	2)情况2:原有的模块文件名复杂
    	import md as m#把md模块名改成m
		print(m.money)#以后就用m点的方式使用
        ————————————————————————————————————
        from md import money as m#把md模块名改成m
        print(m)#以后打印m就可以使用

2.导入多个名字
	import time, sys, os
  上述导入方式建议多个模块功能相似才能使用 不相似尽量分开导入如下:
	import time
	import os
	import sys
____________________________________________
 	from md import money,read1,read2
  上述导入方式推荐使用,因为多个名字出自一个模块文件
3.全导入
	需求:需要使用模块名称中多个名字且只能使用from..import句式
    	from md import * #*表示所有
        
    仅针对*号的导入还可以控制名字数量
      在模块文件中使用__all__=['字符串的名字'] 当调用该模块,用*获取的名字时仅允许使用[]中的名字
6.循环导入问题
1.什么是循环导入?
	循环导入就是两个文件彼此导彼此
2.循环导入容易出现报错现象
	使用彼此的名字可能是在没有准备好的情况下就使用了
3.如何解决循环导入报错现象
	彼此在使用彼此名字前先准备好
    '''
    循环导入尽量避免出现,会循环打印多次结果,如果真的避免不了就让名字使用前提前准备好
    '''
7.判断文件类型
学完模块后,以后程序运行起来涉及的文件就不止一个

所有的py文件中都自带一个__name__内置名
	当py文件是执行文件时,打印__name__的结果就是__main__
	当py文件是被导入文件时打印__name__,执行文件调用被导入文件的结果就是模块名(文件名)
    __name__主要用于开发模块的作者测试自己的代码使用
       if __name__ == '__main__'
        当文件是执行文件时,才会执行if的子代码
       上述判断一般只出现在整个程序的启动文件中
    ps:在pycharm中可以直接编写main按tab键自动补全
8.模块的查找顺序
'''
1.先去内存中查找
2.再去内置中查找
3.再去sys.path中查找(程序系统环境变量)
'''
验证以上:
1.导入一个文件 然后再导入过程中删除该文件 发现还可以使用
	import md #导入执行md模块
	import time #导入执行time模块
    
    time.sleep(15) #让程序暂停15s再执行   中途如果把md模块文件删掉 还会继续执行,因为删除的是硬盘中的,内存中的还在
    print(md.money)#99
    
2.创建一个跟内置模块相同的模块文件名
	import time
	print(time.time())
    #结果会报错
	from time import name
	print(name)
    #结果会报错
  ps:创建模块文件的时候尽量不要与内置模块名冲突

3.导入模块的时候一定要知道谁是执行文件
	所有的路径都是参照执行文件所在的路径来查找的
    
    import sys
    print(sys.path)#会显示一堆文件路径,当内存、内置都找不到需要的文件时,会在该文件路径内查找
    sys.path.append(r'D:\pythonProject\day22\xxx')#把找不到的那个文件路径用.append追加在后面就可以找到了
    import mdd
    print(mdd.name)#jason 找到了
    '需注意pycharm会自动将项目根目录添加到sys.path中'
查找方式:
1.通用的方式:(尾部追加路径)
	sys.path.append(目录文件所在的路径)
2.利用from..import句式
     起始位置一定是执行文件所在的路径
	from xxx import mdd #xxx为文件夹名字内导模块mdd名字
	print(mdd.name)#可以找到
    
    #xxx.内部文件夹名字.内内部文件夹名字(可以查看文件夹嵌套的文件夹)

作业:

1.整理今日内容及博客
	将导入模块发送的事情用详细的文字和图片二次说明
2.尝试着将之前有多个功能函数的题目代码都拆分(一个函数一个文件)使用模块导入的形式调用执行
	非常简单 体会一些导来导入的感觉
3.预习明日内容
	常见内置模块
posted @ 2022-07-14 20:59  逢诱  阅读(25)  评论(0)    收藏  举报