模块的定义:提供一个功能的文件,包是集合一组功能的文件夹,包括init.py文件

一、运行文件的两种方式

  • 1、以模块的方式运行,例如:import py文件名
  • 2、以脚本的方式运行,例如:在pycharm或者item等命令行运行

    二、name_的用法

  • name在不同文件中的运行结果是不同的。如果print(name)代码是在当前文件,那么
    无论何时运行,打印的结果都是 main ,但是如果当前文件被另外一个文件当作模块导入后,在
    另外一个文件的运行结果下,当前文件的打印结果只能是当前文件的文件名

  • 在程序的编写中,需要把类和函数封装之外的所有的内容都写在if name == “main “下边”

    模块反射需注意的:原来sys.modules[‘main‘]获取的是当前文件的内存地址,但是如果当前文件被 作为模块导入时,如果还使用’main‘,那么获取到的只能是当前文件,被导入的模块文件内存地址是获取 不到的,所以需要把’main‘改成name,如果是当前文件,运行的是’main‘,如果是模块执行 运行的是name,即变成了模块名。

  1. ```python
  2. '''模块.py'''
  3. import 内置方法
  4. 内置方法.login()
  5. print(内置方法.file)
  6. import sys
  7. file = sys.modules['__main__']
  8. print(file)
  9. # 通过sys模块中的modules来获取到当前文件的内存地址
  10. # 输出的结果是:
  11. #***<module '内置方法' from '/Volumes/workspace/python-study/re_st/内置方法.py'>
  12. #这是内置方法中的程序
  13. #<module '内置方法' from '/Volumes/workspace/python-study/re_st/内置方法.py'>
  14. #<module '__main__' from '/Volumes/workspace/python-study/re_st/模块.py'>
  15. '''内置方法.py'''
  16. __all__ = ['login', 'file']
  17. def login():
  18. print("这是内置方法中的程序")
  19. if __name__ == '__main__':
  20. login()
  21. import sys
  22. file = sys.modules[__name__]
  23. # 这里必须写成__name__,无论是脚本文件运行还是模块运行都不会出错
  24. # 如果写成'__main__'时,只能获取到当前文件的内存地址,而无法获取导入模块的内存地址
  25. print('***%s' % file)
  26. #结果是:
  27. #这是内置方法中的程序
  28. #***<module '__main__' from '/Volumes/workspace/python-study/re_st/内置方法.py'>

```

三、all的用法

  • all的用法是和from .. import 配合使用的,all= [‘’, ‘’]中的参数是导入的模块中的函数名/变量名
  • 如果不在模块中写all,那么导入的是所有的内容,如果通过all来设定,那么导入的就是设定好的变量和函数,
    模块中没有写的不会导入。

    注意事项:

    • 同一个文件中同一个模块只能导入一次
      当导入模块加载后,模块中的变量和函数都会保存在内存中,如果再修改模块中的数据,程序执行中不会对已保存到内存中的数据产生影响。
    • 在模块的使用的时候一定不能出现循环互相引用的问题,例如:A引入B,B引入C,C引入D,D引入A,文件还未加载,程序已经开始引用了。