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

l1 = [11, 22, 33, 44]
索引取值
	优势:可以随时反复的取值
	劣势:对无序的容器类型无法取值
print(l1[1])  # 22
print(l1[0])  # 11
print(l1[1])  # 22

迭代取值
	优势:提供了一种通用的取值方式
	劣势:取值只能往前不能后退
res = l1.__iter__()
print(res.__next__())  # 11
print(res.__next__())  # 22
print(res.__next__())  # 33
使用那种方法需要结合具体实际情况

模块简介

'''
python的屈辱史
	python刚开始出来的时候都被其他程序员瞧不起 因为太简单 写代码都是调用模块 调包侠(贬义词)
	随着业务的扩展其他程序员也开始用python写代码写完之后发现python贼好用 真香定律 调包侠(褒义词)  
'''
1.模块可以看成是一系列功能结合体
	使用模块就相当于拥有了这个结合体内的所有功能 如虎添翼
2.模块的分类
	2.1.内置模块
	解释器自带的 可以直接使用的模块
	eg:
	import time
	time.sleep(2)
	2.2.自定义模块
	直接写的模块
	eg:
        注册功能 登录功能
	2.3.第三方模块
	别人写的模块 存于网络上 使用之前需要提前下载
	eg:
        图像识别 图形可视化 语言识别
3.模块的四种形式
	1.py文件 使用python编写的文件也可以称之为模块文件
	2.含有多个py文件的文件夹(按照模块功能的不同划分不同的文件夹储存)
	3.已被编译为共享库或DLL的C或C++扩展
	4.使用C编写并链接到python解释器的内置模块

导入模块的两种语法句式

导入模块的句式1 import
image


	import md
1.会产生执行文件的名称空间
2.产生被导入文件的名称空间并运行该文件的所有代码 储存名字
3.在执行文件中会获取一个模块的名字 通过该名字点的方式就可以使用到被导入文件名称空间中的名字
之后的导入 都是直接引用首次导入产出的md.py名称空间 不会重复执行代码
	import md # 有效
	import md # 无效
	import md # 无效

导入模块的句式2  from...import...句式
1.创建执行文件的名称空间
2.创建被导入文件的名称空间
3.执行被导入文件中的代码 将产生的名字储存到被导入文件的名称空间中
4.在执行文件中获取到指定的名字 指向被导入的名称空间

两种导入句式的优缺点

import md 
	优点:通过md点的方式可以使用到模块内所有的名字 并且肯定不会与当前名称空间的名字冲突
	缺点:md什么都可以点 有时候并不想让所有的名字都被使用

from md money, func
	优点:指明道姓的使用指定的名字 并且不需要加模块名前缀
	缺点:名字容易与当前名称空间冲突,(绑定关系被修改)

补充知识

1.起别名
	情况1:多个模块文件相同(多个人写)
        from md import money as md_my
        from foo import money as foo_my
	情况2:原有模块名字比较复杂
        import md as m
        print(m)
2.导入多个名字
        from md import time, sys, os
        上述导入方式多个功能相似才适应 不相似不推荐使用
        import time
        import sys
        import os

        from md import money,func,func1
上述导入方式推荐使用,多个名字都出自同一个模块
3.全导入
	from md import * # *表示所有
	ps:针对星号的导入还可以控制名字的数量
	在模块文件中可以使用__all__ = [字符串的名字]控制*能够获取的名字

循环导入问题

如何理解循环导入
	循环导入就是两个文件彼此导彼此
循环导入容易出现报错现象
	使用彼此名字时可能没准备好是的情况下就使用了
如何解决导入保存现象
	在彼此使用名字前 现准备好
'''循环导入在将来避免出现 如果避免不了 就想办法让所有的名字在使用前准备好'''

判断文件类型

学习完模块之后 我们的程序运行起来可能就是涉及到一个文件了

所有的py文件都是自带一个__name__内置名
	当py文件是执行文件的时候 __name__的结果是__main__
    
__name__主要用于开发模块的作者测试自己的代码使用
	if __name == '__main__':
        当文件是执行文件的时候才会执行if的子代码
	上述判断只会出现整个程序的启动文件中
在pycharm中可以直接编写main+tab键自动补全

模块的查找顺序

'''
1.先去内存中查找
2.再去内置中查找
3.再去sys.path中查找(程序系统的环境变量)
'''
1.导入一个文件 然后在导入过程中删除 依然还可以使用
	import md
	import time
	time.time(15)
	print(md.money)
2.创建一个跟内置模块名相同的文件
	import time
	print(time.time())  # 1657709180.0668466
	print(time.name)
3.导入模块的时候一定要知道谁是执行文件
	所有路径都是参照执行文件来的
import sys
sys.path.append(r'被导入文件路径')
1.通用方式
	sys.path.append(r'目标文件所在路径')
2.利用from...import方式
	from 目标文件路径 import ...
	起始位置一定是执行文件所在路径

 posted on 2022-07-13 20:43  Joker_Ly  阅读(90)  评论(0)    收藏  举报