迭代取值与索引取值的优缺点、模块的简介、导入模块的两种方式、循环导入问题、模块查找顺序

迭代取值与索引取值的优缺点

1.索引取值
	优点:可以随意反复的获取任意数据值
	缺点:针对无序的容器类型无法取值
	eg:
	l1 = [1,2,3,4,5,6]
    dict1 = {'name':'nana','age':18}
    print(l1[3])  # 4
    print(dict1[1])  # 报错 字典是无序的,不能索引取值
2.迭代取值
	优点:提供了一种通用的取值方式
	缺点:取值一旦开始只能从左往右依次取值
	eg:
	res1 = l1.__iter__()
    print(res1.__next__())  # 1
    print(res1.__next__())  # 2
    res2 = dict1.__iter__()
    print(res2.__next__())  # name
    print(res2.__next__())  # age   

模块

模块简介

1.模块:模块可以看成是一系列功能的结合体,使用模块就相当于拥有了这结合体的所有功能
2.模块的分类:
	2.1 内置模块:是解释器自带的,直接导入即可 eg:import time
    2.2 自定义模块:自己写的模块  eg:自己写的注册、登陆功能
    2.3 第三方模块:别人写的模块,使用之前下载下来就可以 eg:图形识别
3.模块的表现形式
	3.1 py文件(模块文件)
	3.2 含有多个py文件的文件夹(按照模块功能的不同划分不同的文件夹存储)
	3.3已被编译为共享库或DLL的c或C++扩展(了解)
	3.4使用C编写并链接到python解释器的内置模块(了解)

导入模块的两种方式

前提简要:在真正编写项目的过程中,所有的py文件名都得是英文,并且py文件被当做模块导入的时候不需要考虑后缀;导入模块有两种方式:import句式、from …import…句式

import句式
1.语法格式: import 模块名(py文件名)
2.知识补充:
	2.1 执行文件与被导入文件
		执行文件:指的是点击鼠标右键运行的当前文件
		被导入文件:是import后面的文件名就是被导入文件
    2.2 同一个程序反复导入相同的模块,导入语句只会执行一次
3.运行步骤
	3.1 创建执行文件的名称空间
	3.2 创建被导入文件的名称空间
	3.3 执行被导入文件中的代码,将产生的名字存储到被导入文件的名称空间
	3.4 在执行文件中获取到一个模块的名字,通过该名字点的方式就可以使用到被导入文件名称空间中的名字
from…import…句式
1.语法格式: from 模块名(py文件名) import 被导入文件中具体的名字
2.运行步骤
	2.1 创建执行文件的名称空间
	2.2 创建被导入文件的名称空间
	2.3 执行被导入文件中的代码,并将产生的名字存储到被导入的文件名称空间中
	2.4 在执行文件中获取到指定的名字,指向被导入文件的名称空间
两种导入句式的优缺点
1.import句式
	优点:通过点的方式可以使用到模块内所有的名字,并且不会冲突
	缺点:在 import句式中,通过点的方式可以使用到模块内所有的名字,但有时候并不想所有的名字都能被使用
2.from...import...句式
	优点:指名道姓的使用指定的名字,并且不需要家模块名的前缀
	缺点:名字及其容易产生冲突,使绑定关系被修改

导入模块句式的补充

1.起别名: import 文件名 as 新的名字;from 文件名 import 被导入文件名称空间里的名字 as 新的名字
	情况1:多个模块文件名相同(一个项目由多个人写)
    情况2:原有的模块名文件复杂
2.导入多个名字
	import time,sys,os >>>建议多个模块功能相似才一起导入,不相似尽量分开导入
	推荐:
	import time
	import sys
	import sys
    from 被导入文件名 import 被导入文件名称空间里的名字1、名字2 、名字3 、名字4 
    上述导入方式是推荐使用的,因为多个名字出自于同一个模块文件中

循环导入

循环导入就是两个文件彼此导入彼此

1.循环导入容易出错的原因:使用彼此的名字可能是在没有准备好的情况下就使用了
2.解决循环导入的方法:彼此在使用彼此名字之前就先准备好
ps:尽可能的避免循环导入,如果真的避免不了,就想办法让所有的名字在使用之前提前准备好

判断文件类型

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

模块 查找顺序

1.顺序
	1.1 先去内存中查找 >>>代码运行后产生的内存空间
	1.2 再去内置中查找  >>>解释器自带的模块
	1.3 最后去sys.path中去查找(程序系统环境变量)
2.验证
	2.1在内存中找:导入一个文件,然后再导入过程中删除文件,发现还可以使用
    	import bbb
        import time
        time.sleep(10)
        print(bbb.money)
	2.2内置中查找:创建一个跟内置模块名相同的文件名
    	import time
        time.func1()  # 报错 AttributeError: module 'time' has no attribute 'func1'
        print(time.time()) # 1657707299.632187
        from time import func1
        func1()  # ImportError: cannot import name 'func1'
	2.3在sys.path中查找:执行文件默认只能在同级别中导入文件,如果想导入不同级别的文件,则需要手动在sys.path中用append()方法添加绝对路径
    	ps:导入模块的时候,一定要知道谁是执行文件,所有的路径都是参照执行文件来的
            pycharm会自动将项目跟目录添加到sys.path中
		import eee   # ModuleNotFoundError: No module named 'eee'
        import sys
                print(sys.path) #  ['D:\\2期学习\\pythonProject\\17', 'D:\\2期学习\\pythonProject\\17',........ ]  在执行文件的路径中没有eee的文件路径,所以导入不了
            
		解决方式:
        import sys
        sys.path.append(r'D:\2期学习\pythonProject\17\ccc\ddd')
        print(sys.path) # ['D:\\2期学习\\pythonProject\\17',......, 'D:\\2期学习\\pythonProject\\17\\ccc\\ddd']
        import eee
        eee.func2()  # 可以执行
3.导入与执行文件不同层级的模块方法
	3.1 通用方式:sys.path.append(目标文件所在的路径)
	3.2 利用from...import句式
    	from aaa.bbb.ccc import 模块名
		from aaa.bbb.ccc.模块名 import 模块名的名称空间的名字
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值