python之模块与包

本文详细介绍了Python中的模块和包。模块是包含Python定义和语句的文件,用于组织代码,可以通过`import`和`from...import`进行导入。模块分为标准库、第三方和自定义模块。包是一个包含`__init__.py`的目录,用于逻辑上组织模块。包的导入涉及到环境变量和路径的管理,动态加载环境变量是导入未在当前环境变量路径中的包的关键步骤。
摘要由CSDN通过智能技术生成

一、模块

1.模块的定义
python模块(Module),就是一个python文件,以.py结尾,包含了对python对象定义和python语句
作用:
模块让你能够有逻辑地组织你的Python代码段。
模块能定义函数,类和变量,模块里也能包含可执行的代码。

2.模块的导入
定义好模块之后
可以用
1)import语句导入
一次可以导入多个方法
导入的本质: 将这个文件执行了一遍以后,保存到模块中。
(这样效率不太高,文件里面可能会有用不到的方法就会被执行了)
格式 import module_test ==> py module_test 把结果执行给了 ==> module_test模块

模块的优化
2)from语句导入
导入哪个模块里面的哪个方法
导入的本质: 把对应文件里面的对应方法做了定义
as 可定义别名 避免模块里面的方法和本地的冲突
格式 from 模块 import 方法 as 别名

module_test文件
def bar():
    print('this is a test from bar...')

def pol():
    print('this is a test from pol')

test文件
from day11.module_test import bar as test_bar,pol as test_pol

test_bar()
test_pol()

结果就可以执行出来了

3)from module_test import * 导入模块里面的所有方法
(一般不这么用)

3.模块的分类
1)标准库 F:\python373\Lib
2)第三方模块 F:\python373\Lib\site-packages
3)自定义模块 F:\python373\Lib\site-packages(一般放在这个路径)

二、python包

1.包的定义
本质就是个目录
(必须带有一个_init.py_的文件,从逻辑上组织模块)

2.包的导入
init.py:在调用该包的内容之前做一些初始化的配置
init.py:运行时,当前的目录没有发生变化
要导入的时候必须在这个文件把导入的模块也导入一遍

在这之前引入一个环境变量和环境变量加载的顺序
打印出系统的环境变量 sys模块 所以要先导入
import sys
print(sys.path)
可以看出以列表的形式打印出来了

print(sys.path)
    ['F:\\pycharm\\Documents\\day11\\atm', 当前路径
    'F:\\pycharm\\Documents',
    'F:\\python373\\python37.zip',
    'F:\\python373\\DLLs',
    'F:\\python373\\lib',
    'F:\\python373',
    'F:\\python373\\lib\\site-packages']

还有模块的执行顺序也就是环境变量加载的顺序:

  1. 首先在当前路径下找模块,因为默认在环境变量里有当前路径
    2)当前下没有,就去加载的环境变量中找模块
    3)在环境变量中也没有找到,系统就会去模块库中查找

import 导入包的时候 因为没有环境变量 所以要导进去
就有了动态加载环境变量
(环境变量随文件的位置的变化而变化)
在这里插入图片描述
包的结构如图 我们想导入atm的包
因为环境变量里面没有day11的目录 所以找不到
因此要动态加载目录到环境变量里面
import os,sys
print(sys.path)
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(file)))
sys.path.append(base_dir)
print(sys.path)

time_test.py文件为

def time():
    print('this a test from atm')

test_admin.py文件为
import os,sys
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(base_dir)
print(sys.path)
import time_test
time_test.time()
结果就可以显示了

注意:

  1. 环境变量动态加载上之后,才可以导入模块。
  2. 加载模块时,只在环境变量的当前目录下找模块,不会到环境变量下级目录下找

这里可以做个测试
在这里插入图片描述
包目录如图

day11下的和atm下的 time_test文件为
def time1():
    print('this is a test from atm...')
    
atm下的 time_test文件为
 def time1():
    print('this is a test from day11/')
  
 atm下的test文件为
 import sys,os

base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(base_dir)
import time_test

time_test.time1()

然后运行这个文件
会发现不动态添加环境变量 也能运行出来
this is a test from atm...

那是因为环境变量第一个就是在当前路径下找模块 所以就找到这个文件了 

这个时候把atm下的time_test文件的名字随便一改
运行这个文件 会发现 
this is a test from day11/
这个就是动态添加的环境变量影响的

2)from day11.atm import main
这个就不用说了 跟模块的一样 导入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值