Python之包的相关
包的产生:
- 由于模块不断更新,越写越大,仅用单个py文件会使模块逻辑不够清晰,所以需要将模块的不同功能放入不同的py文件,然后将所有py文件放在一个目录内,这个目录就是包
- 包就是一个包含用__init__.py文件的目录
包的使用:
- 包的本质是模块的一种形式,包是用来被当做模块导入,而不是用来直接运行
- 导入包本质是导入包内的__init__.py文件
import package
# Python2导入包,若包里没有__init__.py文件会报错
# Python3导入包,若包里没有__init__.py文件不会报错
包的导入:
- 首先有如下文件结构
'''
test_dir/
-pkg1
-__init__.py
-p1_m1.py
-f1()
-p1_m2.py
-f2()
-pkg2
-__init__.py
-p2_m1.py
-f3()
-p2_m2.py
-f4()
-demo.py
'''
在demo.py内使用函数f1
方式一:
import pkg1.p1_m1
pkg1.p1_m1.f1()
# 使用过于啰嗦,可以起别名
import pkg1.p1_m1 as m1
m1.f1()
- 方式二:
# 直接从包内导入文件
from pkg1 import p1_m1
p1_m1.f1()
# 也可直接导入f1
from pkg1.p1_m1 import f1
f1()
注:对使用者来说,包的导入和单个模块的导入应该方式相同,若使用者导入包失败,应考虑包是否在sys.path列表中。
from ...impot 的from 后面可以带多个点. 点的左侧只能是包的名字。
from...import 的import后面只能接py文件或文件内的方法
不能带点.
from pkg1 import p1_m1.f1
p1_m1.f1()
# 语法错误
若要让使用者对包的导入不会发生变化(当作单个模块导入),需要在包内的__init__.py文件内导入其他的模块
绝对导入:
以包作为顶级目录来导入
# pkg1/__init__.py文件内
from pkg1.p1_m1 import f1
from pkg1.p1_m2 import f2
from pkg2.p2_m1 import f3
点的左侧必须是包
相对导入
- 仅限于包内使用,不能跨出包
- . :表示当前目录
- .. :表示上一级目录
# pkg1/__init__.py文件内
from .
注:包内之间的导入推荐使用相对导入
在__init.py__内使用from ... import ... 导入包内的其他模块时,无法直接在init.py文件内运行,只能被其他文件用来导入
在init.py文件内不能使用import p1_m1导入包内的其他文件,这样虽然可以直接在init.py文件内运行导入的模块,但当包被其他文件导入时,由于sys.path环境变量原因,包无法使用。
Python之包的相关的更多相关文章
- python 浅析模块,包及其相关用法
今天买了一本关于模块的书,说实话,模块真的太多了,小编许多也不知道,要是把模块全讲完,可能得出本书了,所以小编在自己有限的能力范围内在这里浅析一下自己的见解,同时讲讲几个常用的模块. 这里是2018. ...
- python浅析模块,包及其相关用法
一,模块 什么是模块? 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里面,代码会越来越长,越来越不容易维护. 为了编写可以维护的代码,我们把很多函数分组,分别放到不同额文件,这样,每个文 ...
- 机器学习常用Python扩展包
在Ubuntu下安装Python模块通常有3种方法:1)使用apt-get:2)使用pip命令(推荐);3)easy_instal 可安装方法参考:[转]linux和windows下安装python集 ...
- Python 中包/模块的 `import` 操作
版权声明:博客为作者原创,允许转载,但必须注明原文地址: https://www.cnblogs.com/byronxie/p/10745292.html 用实例来说明 import 的作用吧. 创建 ...
- 利用python数据分析与挖掘相关资料总结
小生今年研二,目前主要从事软件工程数据挖掘与分析.之前一直苦于找不到一个从数据预处理.数据分析.数据可视化和软件建模的统一平台.因此,小生辗转反辙学习了java,R语言,python,scala等等. ...
- 关于python的包
参考文献:http://blog.sina.com.cn/s/blog_615c388d01017b5o.html 注:本文大多对上连接的整理,仅用于学习,望博主见谅.转载请附上上述链接. 为什么要包 ...
- 快速学习 Python 数据分析包 之 pandas
最近在看时间序列分析的一些东西,中间普遍用到一个叫pandas的包,因此单独拿出时间来进行学习. 参见 pandas 官方文档 http://pandas.pydata.org/pandas-docs ...
- linux和windows下安装python拓展包及requirement.txt安装类库
python拓展包安装 直接安装拓展包默认路径: Unix(Linux)默认路径:/usr/local/lib/pythonX.Y/site-packagesWindows默认路径:C:\Python ...
- Python基础-包与模块
Python基础-包与模块 写在前面 如非特别说明,下文均基于Python3 摘要 为重用以及更好的维护代码,Python使用了模块与包:一个Python文件就是一个模块,包是组织模块的特殊目录(包含 ...
随机推荐
- 第23课 - #error 和 #line 使用分析
第23课 - #error 和 #line 使用分析 1. #error 的用法 (1)#error 是一个预处理器指示字,用于生成一个编译错误消息,这个消息最终会传递到编译器(gcc) 在思考这一点 ...
- [剑指Offer]57-和为s的数字
题目一 输入一个递增的数组和一个数字,在数组中查找2个数字,是他们的和正好为S,如果有多对的和为S,则输出任意一对即可. 题解 关键信息是数组有序.初始化i,j指向第一个和第二个数,与S比较,若小了, ...
- [程序员代码面试指南]递归和动态规划-换钱的方法数(DP,完全背包)
题目描述 给定arr,arr中所有的值都为正数且不重复.每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim,求组成aim的方法数. 解题思路 完全背包 和"求换钱的 ...
- Knowledge 1:Propositional Logic 命题逻辑基础及符号
Keywords reasoning 推理 Deductive reasoning(for a basic logic) 演绎推理 analogy 类比:比喻 /əˈnælədʒi/ definiti ...
- CTF-BugKu-WEB-1-20
2020.09.17 全面复习web,给自己定个目标,后天之前结束BugKu-Web,开始逆向. 经验教训 php弱等于用于绕过==,弱等于之前会把等号两边转化为同一类型变量: 全局变量全局变量全局变 ...
- nginx中编写lua拦截器
先配置nginx location ~ .*\.(php|php5)?$ { if ($request_uri ~ "one/tes ...
- day54:django:锁和事务&Ajax&中间件Middleware
目录 1.ORM中的锁和事务 2.Ajax 3.中间件:Middleware 3.1 什么是中间件? 3.2 django请求的生命周期 3.3 中间件可以定义的5个方法 3.4 自定义中间件的流程 ...
- Linux安装指定版Git以及卸载
来自于:https://www.cnblogs.com/rstyro/articles/10817855.html 安装Git 在linux中,安装Git 一般一条命令即可,如下: Debian/U ...
- jfinal3连接sqlserver2012 保存日期字段出现“不支持从 UNKNOWN 到 UNKNOWN 的转换”错误
修改Dialect中的fillStatement方法,增加判断日期类型并转换为时间戳
- RocketMQ系列:rocketmq运维控制台使用详解(全网独家)
搭建好了RocketMQ的console之后,直接在浏览器打开http://{你的ip}:8080 默认会进入到驾驶舱(dashboard). 总览 整体横向菜单分为八个部分: 运维:主要是设置nam ...