import导入
我们创建一个demo.py文件
print("demo")
a = 7
def method():
print("method run ",a)
然后在python.py中import导入
print("--导入模块-")
#打印语句
import demo
#输出数据
print(demo.a)
#调用方法
demo.method()
print("--为模块名起别名--")
import demo as de
print(de.a)
de.method()
print("--t模块跟变量重名(利用别名解决bug)--")
import demo as df
def demo():
print("----demo--")
demo()
df.method()
输出结果如下:
E:\python\python_sdk\python.exe E:/python/py_pro/python.py
--导入模块-
demo
7
method run 7
--为模块名起别名--
7
method run 7
--t模块跟变量重名(利用别名解决bug)--
----demo--
method run 7
Process finished with exit code 0
from 模块 import(方法,数据) 导入
模块demo.py还是使用上例的代码,不做修改
python.py
from demo import a,method
print(a)
#同名值被覆盖
a = 100
print(a)
#不会改变模块的a值
method()
#引入方法
from demo import method as p
p()
输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/python.py
demo
7
100
method run 7
method run 7
Process finished with exit code 0
from 模块 import* 导入
python.py
print("-----from import * ------------")
from demo import *
print(a)
method()
输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/python.py
-----from import * ------------
demo
7
method run 7
Process finished with exit code 0
_name_
demo1.py
print(dir())
def method():
print("----method-----")
if __name__ == "__main__":
method()
print(repr(__name__))
输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/demo1.py
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
----method-----
'__main__'
Process finished with exit code 0
我们看出name是其内建函数
如果在其他模块中引用上例模块,我们就简单的利用如下的一句话进行引用
import demo1
看看在其他模块中执行操作(注意在其他模块中执行,而不是在被引用的模块中执行),输出结果是什么?
E:\python\python_sdk\python.exe E:/python/py_pro/python.py
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
'demo1'
Process finished with exit code 0
我们看到print(repr(name)) 输出了’demo1’
_all_
demo.py如下:
print("demo")
a = 7
def method():
print("method run ",a)
__all__=['a']
python.py如下:
print("-----*受到__all__的限制------------")
from demo import *
print(a)
# 不能导入
# method()
在python.py中执行结果输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/python.py
-----*受到__all__的限制------------
demo
7
Process finished with exit code 0
模块搜索路径
python解释器在启动时会自动加载一些模块,可以使用sys.modules查看
在第一次导入某个模块时(比如my_module),如果有则直接引用
如果没有,解释器则会查找同名的内建模块,如果还没有找到就从sys.path给出的目录列表中依次寻找my_module.py文件。
所以总结模块的查找顺序是:内存中已经加载的模块->内置模块->sys.path路径中包含的模块
import sys
print(sys.modules)
print("---------------")
print(sys.path)
输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/python.py
{'builtins': <module 'builtins' (built-in)>, 'sys': <module 'sys' (built-in)>, '_frozen_importlib': <module '_frozen_importlib' (frozen)>, '_imp': <module '_imp' (built-in)>, '_warnings': <module '_warnings' (built-in)>, '_thread': <module '_thread' (built-in)>, '_weakref': <module '_weakref' (built-in)>, '_frozen_importlib_external': <module '_frozen_importlib_external' (frozen)>, '_io': <module 'io' (built-in)>, 'marshal': <module 'marshal' (built-in)>, 'nt': <module 'nt' (built-in)>, 'winreg': <module 'winreg' (built-in)>, 'zipimport': <module 'zipimport' (built-in)>, 'encodings': <module 'encodings' from 'E:\\python\\python_sdk\\lib\\encodings\\__init__.py'>, 'codecs': <module 'codecs' from 'E:\\python\\python_sdk\\lib\\codecs.py'>, '_codecs': <module '_codecs' (built-in)>, 'encodings.aliases': <module 'encodings.aliases' from 'E:\\python\\python_sdk\\lib\\encodings\\aliases.py'>, 'encodings.utf_8': <module 'encodings.utf_8' from 'E:\\python\\python_sdk\\lib\\encodings\\utf_8.py'>, '_signal': <module '_signal' (built-in)>, '__main__': <module '__main__' from 'E:/python/py_pro/python.py'>, 'encodings.latin_1': <module 'encodings.latin_1' from 'E:\\python\\python_sdk\\lib\\encodings\\latin_1.py'>, 'io': <module 'io' from 'E:\\python\\python_sdk\\lib\\io.py'>, 'abc': <module 'abc' from 'E:\\python\\python_sdk\\lib\\abc.py'>, '_weakrefset': <module '_weakrefset' from 'E:\\python\\python_sdk\\lib\\_weakrefset.py'>, 'site': <module 'site' from 'E:\\python\\python_sdk\\lib\\site.py'>, 'os': <module 'os' from 'E:\\python\\python_sdk\\lib\\os.py'>, 'errno': <module 'errno' (built-in)>, 'stat': <module 'stat' from 'E:\\python\\python_sdk\\lib\\stat.py'>, '_stat': <module '_stat' (built-in)>, 'ntpath': <module 'ntpath' from 'E:\\python\\python_sdk\\lib\\ntpath.py'>, 'genericpath': <module 'genericpath' from 'E:\\python\\python_sdk\\lib\\genericpath.py'>, 'os.path': <module 'ntpath' from 'E:\\python\\python_sdk\\lib\\ntpath.py'>, '_collections_abc': <module '_collections_abc' from 'E:\\python\\python_sdk\\lib\\_collections_abc.py'>, '_sitebuiltins': <module '_sitebuiltins' from 'E:\\python\\python_sdk\\lib\\_sitebuiltins.py'>, 'sysconfig': <module 'sysconfig' from 'E:\\python\\python_sdk\\lib\\sysconfig.py'>}
---------------
['E:\\python\\py_pro', 'E:\\python\\py_pro', 'E:\\python\\python_sdk\\python36.zip', 'E:\\python\\python_sdk\\DLLs', 'E:\\python\\python_sdk\\lib', 'E:\\python\\python_sdk', 'E:\\python\\python_sdk\\lib\\site-packages']
Process finished with exit code 0