day 29(模块和包)

阅读目录

一。模块和脚本

模块:

  定义:如果一个py文件被导入了,他就是一个模块

脚本:

  定义:如果一个py文件被直接执行了,那他就是一个脚本

模块:

  1.没有具体的调用过程

  2.但是能对外提供功能

当一个模块被导入时,如果pyc文件不存在,python解释器就回去创建,存在不会再次被创建

pyc编译文件: 文件 -字节码-机器码

  编译的具体过程:

    1.从上到下编译成字节码pyc

    2.从上到下,解释执行代码

 为什么要编译
# 1.一个文件如果作为模块 一定会经常被导入
# 2.每次被导入都要经历一个被编译的过程
# 3.包.编译耗费时间
# 4.所以模块在被第一次导入的时候被编译存在pyc文件里
# 5.之后的导入可以直接呐pyc文件中的字节码,就可以直接执行了

# 编译文件 在模块导入的一瞬间 能够提高代码的执行速度
# 不能提高程序在具体执行的时候的效率




引入模块必须满足两个条件:
  1.模块名必须满足变量名的命名规范
  2.被导入的模块所在的位置必须在sys.path所在的搜索路径中


 当login模块被当做脚本执行的时候,能够独立完成登陆功能
# 当login模块被当做模块导入的时候,需要等待调用才能完成功能
# 当一个模块被当做脚本执行的时候,__name__是一个字符串数据类型的'__main__'
# 当一个模块被当做模块导入的时候,__name__是一个字符串数据类型模块名
if __name__ == '__main__':
log_in()
# print('__name__ : ',repr(__name__))

# if __name__ == '__main__':
# 控制了
# 只要当前这个文件直接被执行 就会执行if条件语句内的代码
# 否则 就不会执行if条件语句内的代码




 模块是对外提供功能的

# 如果 我写的这个模块 足够大 能提供的功能足够多
# 多到一个文件写不下
# 把对外提供的功能 根据提供的内容不同,分成几个文件
# 把这些文件放在一个文件夹下,就形成了包

# django框架 包
# 操作数据库的 模块
# 和web页面交互的 模块
# 登录认证 模块
# 安全的中间件 模块

# 导入具体的文件
# from glance.api import policy
# policy.get()
#
# import glance.api.policy as policy
# # glance.api.policy.get()
# policy.get()

# 直接导入包
import sys
print(sys.path)


# import glance
# 使用绝对路径
# 导入一个包 相当于 执行了这个包下面的 __init__.py
# glance #对象
# glance.api.policy.get()
# glance.cmd.manage.main()
# sys.path

from new_pac import glance

# 绝对路径
# 被直接执行的文件与包的关系必须是固定的,
# 一旦发生改变,包内的所有关系都要重新指定
# 跨包引用

# import sys
# print(sys.path)


# 在一个py文件中使用了相对路径引入一个模块
# 那么这个文件就不能被当成脚本运行了



# 包就是py模块的集合
# 自带__init__.py文件
# py2 包中必须有一个__init__.py文件
# py3
# 能不能导入一个包:要看sys.path中的路径下有没有这个包
# 从包中导入模块: 把包与包之间的关系写清楚,精确到模块,就一定能导入
# 直接导入一个包,并不会导入包下的模块,而是执行这个包下的__init__.py文件
# 如果对导入还有更高的要求
# 可以对包中的__init__.py文件做定义
# 绝对路径导入的方式
# 相对路径导入的方式 使用相对路径导入的模块不能作为脚本执行


from new_pec2 import glance
 




 
原文地址:https://www.cnblogs.com/zsdbk/p/8955060.html