ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-07-13 16:31:29  阅读:192  来源: 互联网

标签:__ 文件 迭代 索引 导入 模块 print import 取值


目录

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

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有