0426 模块与包

复习:
os模块
和操作系统交互
工作目录 文件夹 文件 操作系统命令 路径相关的
2.模块
最本质的区别 import会创建一个专属于模块的名字,
所有导入模块中的都会在这个空间中
import
from import
as 起别名
 * 和 __all__
 
计算文件夹中所有文件的大小,递归
import os
def get_size(dir):
sum_size = 0
for item in os.listdir(dir):
path = os.path.join(dir,item)
if os.path.isfile(path):
sum_size += os.path.getsize(path)
else:
sum_size += get_size(path)
return sum_size
ret = get_size('D:python11')
print(ret)
 

import os
def get_size(path):
l = [path]
sum_size = 0
while l:
path = l.pop() # l = ['D:python11day2','D:python11day3'...]
for item in os.listdir(path): #path = 'D:python11'
path2 = os.path.join(path, item) # path2 = 'D:python11day2'
if os.path.isfile(path2):
sum_size += os.path.getsize(path2) # sum = 文件的大小 + 0
else: # l = ['D:python11day2','D:python11day3'...'D:python11venv1Include']
l.append(path2)
return sum_size
print(get_size('D:python11'))

import demo1
模块
py文件
脚本
py文件

如果一个py文件被导入了 他就是一个模块
如果这个py文件被直接执行 这个被直接执行的文件就是一个脚本

模块
没有具体的调用过程
但是能对外提供功能

import login

login.login()


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

pyc文件 编译文件

python --> 字节码 -->机器码

编译过程
从上到下 编译 成字节码 pyc
从上倒下 解释 执行代码

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

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

在一个py文件中使用了相对路径引入一个模块
那么这个文件就不能被当成脚本运行了
 
引入的模块必须满足两个条件
1.模块名必须满足变量名的规范
2.被导入的模块所在的位置必须在sys.path所在的搜索路径中
 
def log_in():
user = input()
pwd = input()
print('三次登陆')

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

if __name__ == '__main__':


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

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