目录
文章目录
1.模块介绍
python之所以这么火就是因为它灵活的模块功能
模块就是一组功能的集合体,我们的程序可以导入模块来复用模块里面的功能
常见的场景:
一个模块就一个包含了一组功能的python文件,通过Import去导入
在Python中,模块的使用方式都是一样的,但是可以使用不同语言编写,只要提供接口python都适用
2.模块的使用方式
import module_name
在文件导入时,执行文件就会先执行被导入文件,把被导入文件里面的变量添加到内存空间
只在第一次导入时才能执行module_name.py,文件内部的代码,此处的显示效果只打印一次
在第一次导入模块时就会发生三件事
1,为源文件(spam模块)创建新的名称空间,在spam中定义的函数和方法若是使用到了global时访问的就是这个名称空间
2,在新创建的命名空间中执行模块中包含的代码,见初始导入import spam
提示:导入模块时到底执行了什么?
3,创建名字spam来引用该命名空间
这个名字和变量名没什么区别,都是‘第一类的’,且使用spam.名字的方式
可以访问spam.py文件中定义的名字,spam.名字与test.py中的名字来自
两个完全不同的地方。
为模块起别名
下面再使用的时候就成了别名,与原来的模块名没有说什么关系!
Import spam as sm
print(sm.money)
from module_name import variable_name
区别
使用from…import…则是将spam中的名字直接导入到当前的名称空间中,所以在当前名称空间中,直接使用名字就可以了、无需加前缀:spam.
**缺点:**容易与当前文件夹的变量冲突
**同样也支持起别名:**在使用的时候直接用别名就好(相当于用的是变量名不用再加前缀)
一行导入多个名字:
from spam import read1,read2,money
demo
#测试一:导入的函数read1,执行时仍然回到spam.py中寻找全局变量money
#test.py
from spam import read1
money=1000
read1()
'''
执行结果:
from the spam.py
spam->read1->money 1000
'''
#测试二:导入的函数read2,执行时需要调用read1(),仍然回到spam.py中找read1()
#test.py
from spam import read2
def read1():
print('==========')
read2()
'''
执行结果:
from the spam.py
spam->read2 calling read
spam->read1->money 1000
'''
from module_name import *
表示把文件或者包里面所有的内容全部导入,在使用的时候容易和文件内部的变量起冲突
使用时直接使用文件内部的变量名就好,但是文件内部有什么变量名并没有提示出来
只适用于文件是你自己创建的,里面有什么变量名你自己可以心知肚明
3.模块搜索路径
内存中已经加载的模块---->内置模块------->sys.path路径中包含的模块
在初始化之后,可以修改python的path,路径放在前面优先于标准库加载
import sys
sys.path.append('/a/b/c/d')
sys.path.insert(0,'/x/y/z') #排在前的目录,优先被搜索