迭代取值与索引取值的差异 模块的使用
作者:互联网
迭代取值与索引取值的差异
l1 = [11,22,33,44,55]
# 索引取值
print(l1[0]) # 11
print(l1[2]) # 33
print(l1[1]) # 11
# 迭代取值
res = l1.__iter__()
print(res.__next__()) # 11
print(res.__next__()) # 22
print(res.__next__()) # 33
取值方式 | 索引取值 | 迭代取值 |
---|---|---|
优势 | 可以随意反复的获取任意数据值 | 提供了一种通用的取值方式 |
劣势 | 针对无序的容器类型无法取值 | 只能从左往右,不能回退 |
没有绝对的好与坏,要结合实际应用不同方式
模块的简介
1.python屈辱史
python刚开始出来的时候,被其他的编程程序员瞧不起(因为太简单)
外号:调包侠(贬义词)
随着业务的扩展,其他程序员也需要使用python写代码(真香警告)
外号:调包侠(褒义词)
2.为什么python很牛
python好用在于,支持python的模块非常多,非常全面,所以用python去达到某个需求时,可能直接就可以找到现成的模块,效率很高
所以python程序员,在接到某个需求时,可以先找找有没有相应的模块
3.如何理解模块
模块可以看成是一系列功能的结合体
使用模块就相当于拥有量这结合体内的所有功能
(使用模块就是站在巨人的肩膀上)
4.模块的分类
分类 | 特点 | 例子 |
---|---|---|
内置模块 | 解释器自带的,直接就可以使用的 | import time |
自定义模块 | 自己写的模块 | 注册功能、登录功能 |
第三方模块 | 别人写的模块,需要从网络上下载 | 图形识别、图形可视化、语音识别 |
5.模块的表现形式
5.1.py文件(也可以称之为模块文件)
5.2.含有多个py文件的文件夹(按照模块功能的不同划分不同的文件夹储存)
5.3.已被编译为共享库或DLL的或c++扩展
5.4.使用c编写并链接到python解释器的内置模块
导入模块的两种句式
一、导入模块句式一 --- import句式
import md
'''
执行文件:当前打开的文件
被导入的文件:import 后面的文件名 eg:md.py
'''
1.过程
1.1.会产生执行文件的名称空间
1.2.产生被导入文件的名称空间,并运行该文件内所有的代码,导入存储的名字
1.3.在执行文件中会获取一个模块的名字,通过该名字点的方式可以使用到被导入文件名称空间中的名字
2.补充说明
同一个程序反复导入相同的模块,导入语句只会执行一次
import md # 有效
import md # 无效
import md # 无效
3.执行文件代码
import mk
name = "执行文件的 张"
def read():
print('执行文件的read')
print(name) # 执行文件的 张
read() # 执行文件的read
print(mk.name) # mk's zhang
mk.read() # 执行模块里的read函数
4.被导入模块的代码
name = "mk's zhang"
def read():
print('执行模块里的read函数')
二、导入模块的句式二 --- from...import...
1.过程
1.1.创建执行文件的名称空间
1.2.创建被导入文件的名称空间
1.3.执行被导入文件中的代码,将产生的名字存储到被导入文件的名称空间中
1.4.在执行文件中获取到指定的名字,指向被导入文件的名称空间
2.执行文件代码
from mk import money,read2
print(money) # mk's money
money = 100000
print(read2) # <function read2 at 0x000001BC69D802F0>
print(read) # <function read at 0x000001BC699F6048>
print(money) # 100000
3.被导入模块代码
money = "mk's money"
def read2():
print('执行模块的read2')
两种导入句式的优缺点
导入句式 | 优点 | 缺点 |
---|---|---|
import ... | 通过点的方式可以使用到模块内所有内容,并且不会传统· | md什么都可以点,有时候并不想让所有的名字都能使用 |
from... import ... | 指名道姓的使用指定的名字,并且不需要加模块名前缀 | 名字极其容易产生冲突(冲突:绑定关系被修改) |
补充知识
一、起别名
情况1:多个模块文件名相同(多个人写)
from md import money as md_my
from md import money as md1_my
print(md_my)
print(md1_my)
情况2:导入多个名字
import time,sys,os
# 上述导入方式建议多个模块功能相似才能适应,不相似尽量分开
import time
import os
import sys
from md import money,read1,read2
# 这个导入方式是推荐使用的,因为多个名字出自于同一个模块文件
3.全导入
# 需求:需要使用模块名称空间中的很多名字,并且只能使用from...import句式
from md import * # *表示所有
'''针对 * 的导入还可以控制名字的数量'''
__all__ = [字符串名字]
# 可以用来在模块文件中控制*能够获取的名字
循环导入问题
一、如何理解循环导入
循环导入就是两个文件互相导入
二、出现报错现象
可能是因为彼此的名字还没准备好就被使用了
三、如何解决
彼此在导入彼此的名字之前,先准备好各自的名字
循环导入应该尽量避免!!实在避免不了,要保证所有名字要在使用之前准备好
判断文件类型
一、双下__name__内置名
__name__
所有py文件都自带__name__内置名
当py文件是执行文件的时候__name__的结果是__main__
当py文件是被导入文件的时候__name__的结果是模块名(文件名)
二、双下name内置名的应用场景
一般是模块开发者用于测试自己的代码
if __name__ == '__main__'
当文件是执行文件时,才会执行的子代码
# 一般只出现在整个程序的启动文件中
'''在pycharm中,输入main+Tab 可以自动补全'''
模块的查找顺序
一、查找顺序
内存中查找 ===》内置中查找 ===》sys.path中查找(程序系统环境变量)
二、sys.path(程序系统环境变量)
1.导入一个文件,在导入过程中删除该文件,会发现还可以使用其中的变量名
import md
import time
time.sleep(15)
print(md.money)
2.创建一个跟内置模块码相同的文件名
import time
print(time.time()) # 1657696069.2886362
print(time.name)
'''创建模块文件时,尽量不要和内置模块重名'''
3.导入模块的时候一定要知道谁是执行文件
所有的路径都是参照执行文件来的
执行文件默认只能导入同级的模块文件,如果要导入不同级的模块文件,需要添加模块文件的路径
import sys
sys.path.append(r'被导入文件的路径')
'''
1.通用方式
sys,path.append('目标文件路径')
2.利用from...import句式
from 目标文件路径 import ...
起始位置一定是执行文件所在的路径
'''
import not_same_level # 不能导入
import sys
print(sys.path)
'''['D:\\PycharmProjects\\710new_week',
'D:\\PycharmProjects\\710new_week',
'D:\\PyCharm 2022.1.2\\plugins\\python\\helpers\\pycharm_display',
'D:\\Python36\\python36.zip',
'D:\\Python36\\DLLs',
'D:\\Python36\\lib',
'D:\\Python36',
'D:\\Python36\\lib\\site-packages',
'D:\\PyCharm 2022.1.2\\plugins\\python\\helpers\\pycharm_matplotlib_backend']
'''
import sys
sys.path.append(r"D:\\PycharmProjects\\710new_week\\aaa")
import not_same_level
print(not_same_level.name) # 不同级的名字
# 会标红,但是不影响运行
模块文件的导入
标签:__,文件,迭代,索引,导入,模块,print,import,取值 来源: https://www.cnblogs.com/Zhang614/p/16474350.html