今天主要讲的内容有:
一、包的详解
二、相对导入和绝对导入
三、内置模块补充
一、包的详解
1、包是什么
包其实也是一个模块,只不过是一个大的模块下包含一堆模块的载体
本质上也是一个文件夹,与普通文件的区别在于其中包含一个init的文件
2、包的作用
包的作用就是提高代码的可读性和扩展性
3、怎么使用包
创建一个package文件夹,在该文件下创建多个文件
使用包和调用模块一样,import 包名
4、init文件的作用
模块调用会发生一下三种情况:
1.会创建一个名称空间
2.会执行模块中的代码
3.在执行文件中产生的名称指向模块名称的空间
但包是一个文件夹是包不是文件,所以init在导入包时,就执行了包上模块功能
好处:可以在init文件下调用多个模块中的功能,就无需在挨个查找
总结:init其实是讲所有模块名导入到该文件下,继而将所有模块名称下的功能导入其中
注意:由于init文件作为模块导入,所以sys.path中不包含该目录,所以导入时要制定该名
5、包的嵌套
定义:包的嵌套的就是包中有包的意思,包中的包被称为子包
要是用子包中的内容和模块方法一样,在子包中的init中导入需要的内容,但要注意不管 是子包都是做为模块导入的
调用sys.path中肯定不包含子包路径,导入时需要从文件目录往下找
6、导入需要注意的事项
1.使用import导入模块时可以加点来访问下层
2.注意点的左边必须是包名
3.在import后面不可以有点,必须有一个明确的名字
二、相对导入和绝对导入
1、相对导入的定义
从sys.pash开始的完整路径开始导入
2、绝对导入的定义
相对于被导入模块的路径
语法为 "."表示当前路径,”.."表示上一层路径,“..."上上层的路径 以此类推
3、注意事项:
1.建议不超过三层
2.相对导入只能用于包的内部模块之间的调用
4、常见的错误演示
绝对导入时没有从当前文件开始
执行文件中用了绝对导入
跳出了顶层包的范围
三、内置模块的补充
print(complex(1)) #complex 转换为复数形式 print(dir()) #查看内置属性和方法,不传参数就是当前对象 print(divmod(10,3)) #执行除法运算,返回商和余数 print(enumerate(["a",2,3,4])) #将值和索引组成元组 print(globals()) #查看全局空间中有哪些名称 def func(): x=100 print(locals) func() #locals 查看局部空间有哪些名称 print(hash([1,2,3])) #不可变类型可hash 可变类型不可hash print(help()) #查看帮助信息 li=[1,2,3,4] res=li.__iter__() res.__nest__() iter(li) next(res) #可迭代对象和可迭代器对象 print(len(li)) #代表长度 print(id(100)) print(memoryview("100".encode("utf-8"))) #id和memoryview 找内存地址 print(pow(2,3,3))#2**3%3 #2的三次方除3 print(type(str([1,2,3]))) #返回对象字符串的表示 print(list(reversed([1,2,3]))) #reversed反转顺序 print(round(1.2)) #四舍五入 res=slice(1,3) li=[1,2,3,4,5,6,7,8,9] print(li[1:3]) print(res) #slice切分的意思 print(list(zip([1,2,3],[3,2,1]))) #zip拉链函数将多个可迭代对象中的数据一一对应 print(vars()) #不传参数和locals一样,如果传参那就调用这个对象的__dict__
原文地址:https://www.cnblogs.com/wuzhengzheng/p/9778227.html