目录
首先啊,在python中我们熟知的py文件就是一个模块,也就是换言之以py结尾的Python源代码文件都是一个模块我就简单概括一下了直接上代码
1.模块的使用
使用模块里的工具前需要导入模块,
模块的导入方式之import·······
单个:
import 模块名
多个:
import 模块1
import 模块2
import 模块1,模块2(一般不推荐使用)(多个)
代码示范:
比方说你有一个py文件我们暂且叫他测试文件cs.py
#文件名:cs.py x=\'一定要努力\' def get(): print(x) def change(): global x x=0 class Foo: def func(self): print(\'不然变垃圾\')
2.导入模块并使用
要想在另外一个py文件中引用cs.py中的功能,需要使用import cs,首次导入模块会做三件事:
1、执行源文件代码
2、产生一个新的名称空间用于存放源文件执行过程中产生的名字
3、在当前执行文件所在的名称空间中得到一个名字cs,该名字指向新创建的模块名称空间,若要引用模块名称空间中的名字,需要加上该前缀,如下
代码示例:
\"\"\"导入cs模块\"\"\" import cs \"\"\"引用cs模块点中的x变量并重新赋值给当前名称空间中的zqh,zqh就具备了cs模块中x的值\"\"\" zqh = cs.x print(zqh) \"\"\" 打印结果:一定要努力\"\"\" \"\"\"调用cs的get函数\"\"\" cs.get() \"\"\"调用cs的change函数\"\"\" cs.change() \"\"\"使用模块cs的类Foo来实例化,进一步可以执行obj.func()\"\"\" obj = cs.Foo() obj.func()
注意:加上cs.作为前缀就相当于指名道姓地说明要引用cs.py名称空间中的名字,所以肯定不会与当前执行文件所在名称空间中的名字相冲突,并且若当前执行文件的名称空间中存在x,执行cs.get()或cs.change()操作的都是源文件中的全局变量x。
3.模块的导入方式之from-import 语句
既然他们都是导入模块的语句他们有何不同呢可能你们或许会有这个疑问
from…import…与import语句基本一致,唯一不同的是:使用import cs导入模块后,引用模块中的名字都需要加上cs.作为前缀,而使用from cs import x,get,change,Foo则可以在当前执行文件中直接引用模块cs中的名字,还有这种:from cs import * 把cs中所有的名字都导入到当前执行文件的名称空间中,在当前位置直接可以使用这些名字
代码示例
cs.py: x=\'悟空\' def get(): print(x) def change(): global x x=\'b.py的x\' class Foo: def func(self): print(\'不然变垃圾\') change() aa=Foo() aa.func() get() a.py: \"\"\"导入cs模块,并且导入cs模块中的方法导入当前名称空间\"\"\" from cs import get,change,x x=\'a.py的x\' \"\"\"直接使用模块cs中的x赋值给zqh\"\"\" zqh=x \"\"\"直接使用测试文件中的get()函数\"\"\" get() \"\"\"#即便是当前有文件有重名的x,修改的仍然是源文件中的x\"\"\" change() 打印结果: 不然变垃圾 b.py的x b.py的x
4.__all__变量用来控制*
模块的编写者可以在自己的文件中定义__all__变量用来控制*代表的意思
\"\"\" 该列表中所有的元素必须!!!是字符串类型,每个元素!对应!cs.py中的一个名字\"\"\" \'\'\' 学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! \'\'\' cs.py: __all__=[\'x\',\'get\',\'change\'] x=\'悟空\' def get(): print(x) def change(): global x x=\'b.py的x\' class Foo: def func(self): print(\'不然变垃圾\') a.py: \"\"\"这样我们在另外一个文件中使用*导入时,就只能导入__all__定义的名字了\"\"\" from cs import * \"\"\"__all__列表存在get可用\"\"\" print(get()) \"\"\"__all__列表存在change可用\"\"\" print(change()) \"\"\"__all__列表存在x可用\"\"\" print(x) \"\"\"__all__列表不存在Foo不可用\"\"\" aaa=Foo() #报错NameError: name \'Foo\' is not defined
导入语法as(起别名)
import cs as zqh #为导入的模块cs在当前位置起别名zqh,以后再使用时就用这个别名zqh zqh.x zqh.get()
还可以为为导入模块的某一个名字起一个别名
例如:
from cs import get as cs_get cs_get()
5.总结
在Python中模块也属于第一类对象,可以进行赋值、以数据形式传递以及作为容器类型的元素等操作。
模块名应该遵循小写形式,标准库从python2过渡到python3做出了很多这类调整,比如ConfigParser、Queue、SocketServer全更新为纯小写形式。
暂无评论内容