其他分享
首页 > 其他分享> > 迭代取值与索引取值的差异 模块的使用

迭代取值与索引取值的差异 模块的使用

作者:互联网

目录

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

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