# 1、当.py被运行时,__name__的值为'__main__'
# 1、当.py被当做模块导入时,__name__的值为'foo'
main-tab --- if __name__ == '__main__':pass 。。。
# import导入模块在使用时必须加前缀"模块."
import ...导入发生了三件事
# 1、产一个模块的名称空间
# 2、运行foo.py将运行过程中产生的名字都丢到模块的名称空间去
# 3、当前名称空间中拿到foo指向foo.py的名称空间
# 优点:肯定不会与当前名称空间中的名字冲突
# 缺点:加前缀显得麻烦
improt foo
foo.x
from...impot...导入模块在使用时不用加前缀
from ... import ...导入发生了三件事
# 1、产一个模块的名称空间
# 2、运行foo.py将运行过程中产生的名字都丢到模块的名称空间去
# 3、在当前名称空间创建一个名字,该名字与模块名称空间中名字相同且指向一个内存地址
# 优点:代码更精简
# 缺点:容易与当前名称空间混淆
from foo import x # x=模块foo中值1的内存地址
x=1111
-----图解-----#来自于egon老湿

# 一行导入多个名字(不推荐)
# from foo import x,get,change
------
# *:导入模块中的所有名字
# from foo import *
# from socket import *
------
# 了解:__all__
# from foo import *
__all__ = ["get",...]
# 用来控制*代表的名字有哪些,屏蔽掉模块中的某些名称,使其不被调用
------
# 起别名
from foo import get as g
无论是import还是from...import在导入模块时都涉及到查找问题
优先级:
1、内存(内置模块)
2、硬盘:按照sys.path中存放的文件的顺序依次查找要导入的模块
# import sys
# sys.path 值为一个列表,存放了一系列的文件夹路径
# 其中第一个文件夹是当前执行文件所在的文件夹
# print(sys.path) #返回列表
# 了解:sys.modules查看已经加载到内存中的模块
# print('foo' in sys.modules) #返回布尔值
# 找模块.py就把模块.py的文件夹添加到环境变量中
# sys.path.append(r'/Users/PycharmProjects')#是暂时添加环境变量,仅当前文件运行时生效