模块和包

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





原文地址:https://www.cnblogs.com/duanpengpeng/p/9414908.html