模块的循环导入+包——day16

模块的循环导入
在一个模块中要导入另一个模块时如果代码如下
他只会运行到m1的from m2 import y,func2 和 m2的from m1 import x这里就会报错
原因就是在导入时会自行吧运行文件运行一遍
————m1.py————————
print('正在导入m1')

from m2 import y,func2

x='m1'
————m2.py————————
print('正在导入m2')

from m1 import x

y='m2'

解决方法:
把他们定义成函数,函数在调用时不会运行函数内的程序
print('正在导入m1')

def func1():
from m2 import y,func2
print('来自与m2的y: ',y)
func2()

x='m1'
------------------------------------
print('正在导入m2')

def func2():
from m1 import x
print('来自m1的x: ',x)
y='m2'
==============================================
1.什么是包
包就是含有_init_.py文件的文件夹
2.为何要用包
就是要让使用者感觉不出来文件已经被修改,用法还是和原来一样
3.如何用包
新建一个文件夹把文件夹命名为原文件名,把功能放入新建的文件夹下
新建一个__init__.py文件 文件内写

绝对导入
import sys——————————(1.需要在环境变量里面添加他的绝对路径)
sys.path.append(r'D:\脱产5期内容\day16\dir')
import aaa # aaa--------->__init__.py——————2.然后在调用dir路径下的aaa文件
__init__.py,通过他来找到
3.------# from aaa.m1 import func1,func2,func3,func4
--------# from aaa.m2 import f1,f2,f3,f4
里面的各个功能

相对导入——————(只能在包内使用)(只能在包内使用)————————
(.)相当于当前文件夹的上一级文件夹..是上上级文件夹
from .m1 import func1,func2,func3,func4
from .m2 import f1,f2,f3,f4
from .bbb.m3 import fff

posted @ 2018-12-05 16:17  WenChen-0o0  阅读(179)  评论(0编辑  收藏  举报