模块和包
from import 的时候,相当于执行了整个py文件
在from import的时候命名空间的变换
导入了什么 就能使用什么 不导入的变量 不能使用
不导入并不意味着不存 而是没有建立文件到模块中其他名字的引用
当模块中导入的方法或者变量 和 本文件重名的时候,
那么这个名字只代表最后一次对它赋值的哪个方法或者变量
重命名 from my_module import login as l l()
导入多个 from my_module import login,name login() print(name) name = '太亮' login()
导入多个之后再重命名
from my_module import login as l,name as n
from 模块 import *
from my_module import *
login()
name
__all__可以控制*导入的内容
from my_module import *
__all__ = ["要引用的变量名"]
login()
from my_module import name
print(name)
把模块当成脚本运行
运行一个py文件的两种方式 1.以模块的形式运行 import my_module if __name__ == '__main__': my_module.login() 2.直接pycharm运行 cmd运行 ----以脚本的形式运行 那么需要在本文件中直接打印的代码上加上 if __name__ == '__main__':
在编写py文件的时候
所有不在函数和类中封装的内容都应该写在
if __name__ == '__main__':下面
import sys
import my_module
sys.modules
{'sys':文件的内存地址,
'my_module': my_module的地址
'__main__':当前直接执行文件所在的地址}
存储了所有导入的文件的名字和这个文件的内存地址
再使用反射自己模块中的内容的时候
import sys
getattr(sys.modules[__name__],变量名)
模块没导入之前在硬盘上
模块的搜索路径全部存储在sys.path列表中
导入模块的顺序,是从前到后找到一个符合条件的模块就立即停止不再向后寻找
如果要导入的模块和当前执行的文件同级
直接导入即可
如果要导入的模块和当前执行的文件不同级
需要把要导入模块的绝对路径添加到sys.path列表中
模块的循环引用
# 在模块的导入中 不要产生循环引用问题
# 如果发生循环导入了
# 就会发现明明写在这个模块中的方法,确偏显示找不到
包
导入包 相当于执行了这个包下面的__init__.py