python模块之包
包:将解决一类问题的模块放在同一目录下就形成了一个包
为了更好的了解包,我们就模拟创建一个包
import os
os.makedirs('glance/api')
os.makedirs('glance/cmd')
os.makedirs('glance/db')
lis = [open('glance/__init__.py', 'w'),
open('glance/api/__init__.py', 'w'),
open('glance/api/policy.py', 'w'),
open('glance/api/versions.py', 'w'),
open('glance/cmd/__init__.py', 'w'),
open('glance/cmd/manage.py', 'w'),
open('glance/db/__init__.py', 'w'),
open('glance/db/models.py', 'w')]
map(lambda f: f.close(), lis)
我们创建的那些'.py'文件就相当于一个个模块,可以在里面写一个简单的函数,用作测试。
包中模块的导入
# 通过包名.目录.模块名 将包内部的模块导入
import glance.api.policy as policy
policy.get()
__init__.py文件的作用
# 每个包下面都要有一个__init__.py文件 导入包时,就会执行这个文件
f = open('glance/__init__.py', 'w', encoding='utf-8')
f.write("print('this is glance/__init__.py')")
f.close()
import glance # 打印this is glance/__init__.py
因此在我们自己创建一个包时,就可以利用__init__.py在完成内层的导入工作。
"""
因此可以通过在__init__.py文件提前写好包的下一层的导入代码
from glance import api
from glance import cmd
from glance import db
"""
f = open('glance/api/__init__.py', 'w', encoding='utf-8')
f.write("print('this is glance/api/__init__.py')")
f.close()
# 执行了from glance import api 进而执行了api下的__init__.py
import glance # 打印this is glance/api/__init__.py # 在api下的__init__.py写好 from glance.api import policy
import glance
glance.api.policy.get() # 打印from policy.py
"""
通过这种提前在__init__.py文件中写好下一层所有内容的导入代码的方式
只需要import包名就可以导入下面的所有模块
"""
一般有两种导入方式:绝对路径导入和相对路径导入
1,绝对路径导入
# 绝对路径导入 在__init__.py文件中写导入代码时,使用绝对路径,如:from glance.api import policy
"""
优点:导入后,不管在包内部还是外部都可以使用,并且直观。
缺点:不能挪动,不然就会找不对路径
"""
2,相对路径导入
# 相对路径导入 在__init__.py文件中写导入代码时,使用相对路径,如:from . import policy
"""
'.'代表当前目录
优点:可以随意挪动,只要能找包,里面的模块就能正常导入
缺点:不能在包内使用包中的其他模块,执行导入会报错
"""
python模块之包的更多相关文章
- Python/模块与包之模块
Python/模块与包之模块 1.什么是模块? 模块就是py文件 2.为什么要用模块? 如果在解释器上进行编码,把解释器关闭之前写的文件就不存在了,如果使用模块的话就能永久保存在磁盘中. 3.如何使用 ...
- Python模块、包、异常、文件(案例)
Python模块.包.异常.文件(案例) python.py #模块 # Python中的模块(Module),是一个Python文件,以.py文件结尾,包含了Python对象定义和Python语句, ...
- 【Python】解析Python模块与包
模块 模块是非常简单的Python文件,单个Python文件就是一个模块,两个文件就是两个模块. import语句是用来导入模块或者从模块里导入特定的类或者函数.如前面我们用过的math模块,从而可以 ...
- python 模块和包深度学习理解
python 模块和包 简单说相当于命名空间 1,python 模块 python模块就是一个文件,里面有函数,变量等 import 模块 模块.方法 from 模块 import fu ...
- (三)运用Python模块和包
1 引言 为了能够在Python项目中高效地运用Python模块和包,我们需要进一步地来了解它们是如何在Python项目中进行定义.使用和工作的. 2 Python模块和包 Python模块和包的基本 ...
- Python模块04/包/logging日志
Python模块04/包/logging日志 目录 Python模块04/包/logging日志 内容大纲 1.包 2.logging日志 3.今日总结 内容大纲 1.包 2.logging日志 1. ...
- Python模块和包
模块和包是python组织代码的基本方式. 模块: python的每一个脚本文件都可称之为模块,模块的名称就是脚本的文件名.例如当我们写了一个test.py的脚本文件,则可以在同目录下的另外一个脚本m ...
- python模块与包的导入
1. 模块与包的区别 模块,即module,一个包含python语句的.py文件就是一个模块!每个源代码文件都会自动成为模块!没有额外的语法用来声明模块. 包,又称模块包,即module packag ...
- python模块及包的导入
一.模块 通常模块为一个文件,直接使用import来导入就好了.可以作为module的文件类型有".py".".pyo".".pyc".&q ...
- 简述Python模块和包
我们常常会使用别人写的包,假如我们使用的是Python3.4版本,安装在windows的C盘根目录下,那么外部的包一般放在:C:\Python34\Lib\sit-packages下,此目录下有以.p ...
随机推荐
- js中字符串的加密base64
base64编码主要用在传输,存储表示二进制的领域,还可以进行加密和解密.其实就是字符串的编码和解码 btoa与atob 只能加密ascii,不能加密汉字. var str = 'I LOVE YOU ...
- 深入浅出Cocoa之消息(二)-详解动态方法决议(Dynamic Method Resolution) 【转】
序言 如果我们在 Objective C 中向一个对象发送它无法处理的消息,会出现什么情况呢?根据前文<深入浅出Cocoa之消息>的介绍,我们知道发送消息是通过 objc_send(id, ...
- Spring_使用(JDBC)
Spring_对JDBC的支持 使用JdbcTemplate更新数据库 导入jar包 创建applicationcontext.xml <?xml version="1.0" ...
- tftp-server服务器搭建
学习搭建TFTP服务器(步骤来于网上) 以contos6.5为例 执行下面的命令能够看到服务是否已经启动,若已经启动则不用安装,否则需要安装下面的步骤安装tftp-server服务器 netstat ...
- iOS9新系统下App Store应用上传新指南
http://www.cocoachina.com/appstore/20151010/13691.html 最近频繁收到小伙伴们的反馈,说经过前期学习已对ASO规则略有了解,但APP的提交审核是由技 ...
- UIScrollView 实践经验
UIScrollView(包括它的子类 UITableView 和 UICollectionView)是 iOS 开发中最常用也是最有意思的 UI 组件,大部分 App 的核心界面都是基于三者之一或三 ...
- nginx简单使用
nginx开启./nginx重启./nginx -s reload关闭./nginx -s stop或quit
- Data Lake Analytics中OSS LOCATION的使用说明
前言 Data Lake Analytic(后文简称 DLA)可以帮助用户通过标准的SQL语句直接对存储在OSS.TableStore上的数据进行查询分析. 在查询前,用户需要根据数据文件的格式和内容 ...
- 2019.9.10附加题while练习
题目:企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%:20万到40万之 ...
- 安装完django验证是否安装成功&&运行项目
1.验证是否成功安装django 上图证明安装成功 2.打开客户端的pycharm,在terminal中打开窗体,什么都没输入,运行下面的命令 python manage.py runserver 在 ...