1.循环导入问题
执行文件///////
# 解决循环导入问题就是在做着屎上雕花的事,尽量不要让它出现,如果你很不幸遇到
# 了,那就用函数来试着解决吧!
x =1
import m1
#
# print(m1.x)
# print(m1.y)
#
m1.f1()
import m2
m2.f2()
模块1//////
print('正在导入m1')
# from m2 import y
# x = 'm1' # 这样写根本就执行不到x这个语句它会在m1和m2的导入语句之间反复横跳
# x = 'm1'
# from m2 import y # 这样写只是临时抱佛脚,如果代码多呢??
def f1():
from m2import y
x ='m1' # 写入函数这个‘花’就还不错了,因为函数是在调用的时候才会运行
模块2///////
print('正在导入m2')
# from m1 import x
# y = 'm2' # 这样写根本就执行不到x这个语句它会在m1和m2的导入语句之间反复横跳
# y = 'm2'
# from m1 import x # 这样写只是临时抱佛脚,如果代码多呢??
def f2():
from m1import x
y ='m2' # 写入函数这个‘花’就还不错了,因为函数是在调用的时候才会运行
2,区分py文件的两种用途
# py文件的两种用途:
#1、直接运行
#2、被当作模块导入
import spam
spam.f1()
def f1():
print('spam.f1')
def f2():
print('spam.f2')
# print(__name__) # 当文件被当做脚本直接执行时,__name__值为__main__
# print(__name__) # 当文件被当做模块被导入时__name__值为模块名
if __name__ =='__main__':
print('文件被当做脚本执行时要做的事')
f1()
f2()
3,文件搜索与查找文件的优先级
# 一:模块的搜索路径与查找优先级
# (1) 先从内存中已经导入的模块里找
# import mmm
# mmm.f1() # 这里做一个实验我们先自定义一个模块导入
#
# import time
# time.sleep(15) # 让程序暂停15秒
#
# print('='*50)
# import mmm # 趁这个时间把自定义的模块删除!!发现依然正常导入
# 了 ,那是因为程序还在运行 内存中还有模块的名称空
# 间,我们只是把硬盘中的内容给删除了,直到程序运行
# 结束才会真正的消失
# mmm.f1()
# (2) 然后再查找内置的模块
# import sys
# print(sys.modules) # 可以看到有哪些内置模块
# import sys
# print(sys.path) # 环境变量所在的路径
# 当前执行文件所在的文件夹
# import logging # 内置的日志模块
# print(logging)
# (3) 最后去sys.path列表中存放的多个文件夹里依次检索
# 示例1:
# import sys
# print(sys.path)
# sys.path.append(r'D:\python全栈15期\aaa\bbb') # 添加到环境变量里
#
# import ccc
#
# ccc.f1()
# 示例2:
# import sys
# print(sys.path)
# import aaa.bbb.ccc as c
# c.f1()
# from aaa.bbb import ccc
# ccc.f1()