guxh的python笔记十:包和模块
1,包和模块
包package:本质就是一个文件夹/目录,必须带一个__init.__.py的文件
模块module:.py结尾的python文件
2,导入方法
import pandas, collections # 导入多个
import pandas as pd # 起别名
from module import fun # 导入优化,可以直接使用fun
import只能导入package或者module,不能直接import到对象,例如import module.fun
import到package后,如果想能够访问module及module中的方法,需要package中的__init__函数支持,否则无法访问
可以通过__all__控制导出的类/方法列表
3,包pakage中__init__导入方法 - 单个package
guxh/
|-- init.py
|-- main.py # 有main_fun()
3.1,__init__函数没有import目标module
"""__init__函数中为空"""
无法通过 import package自动获得package下的module,需手工指定module。
使用guxh包时支持如下方式:
from guxh import main
guxh.main.main_fun()
import guxh.main
guxh.main.main_fun()
典型样例:tkinter包下的__init__没有导入filedialog,所以使用时需要import tkinter.filedialog
3.2,__init__函数import了目标module:
from . import main # 相对路径导入
from guxh import main # 绝对路径导入
使用时必须带上main模块,通过main模块访问fun方法
使用guxh包时支持如下方式:
import guxh
guxh.main.main_fun()
from guxh import main_fun
main.main_fun()
import guxh.main_fun
guxh.main.main_fun()
3.3,__init__函数import了目标module中的方法
from .main import * # 相对路径导入,导入所有方法
from .main import main_fun # 相对路径导入,指定导入main_fun方法
from guxh.main import * # 绝对路径导入,导入所有方法
from guxh.main import main_fun # 绝对路径导入,指定导入main_fun方法
这样可以让package像module,不用带上main模块直接使用main_fun,同时也支持带上main模块访问main_fun。
使用guxh包时支持如下方式:
import guxh
guxh.main_fun() # guxh能直接访问到main_fun()
guxh.main.main_fun() # 带上main也行
from guxh import main
main.main_fun()
import guxh.main
guxh.main_fun() # guxh能直接访问到main_fun()
guxh.main.main_fun() # 带上main也行
3.4,错误的导入方法
只能import到package或者module,不能import到函数或类
import guxh.main.main_fun
另外__init__中导入其他模块或者模块中的方法,并且供第三方调用使用,应该:
from . import main_fun
from .main import main_fun
但是如果是init自己导入执行,则应该:
import main_fun
from main import main_fun
4,包pakage中__init__导入方法 - 2个package
guxh/
|-- __init__.py
|-- main.py # 有main_fun()
|
|-- core/
| |-- __init__.py
| |-- sub.py # 有sub_fun()
要想访问sub.py,完整的访问路径应该是guxh.core.sub.sub_fun(),如果想省略中间的package或者module,方法如下:
4.1,guxh.core.sub.sub_fun()
两个package的init都import到module,访问时core(package)和sub(module)都不能省
guxh/__init__.py:
from guxh import core
guxh/core/__init__.py:
from . import sub
4.2,guxh.sub.sub_fun()
父package的init import *,可以省略core(package)
guxh/__init__.py:
from guxh.core import *
guxh/core/__init__.py:
from . import sub
4.3,guxh.core.sub_fun()
子package的init import *,可以省略sub(module)
guxh/__init__.py:
from guxh import core
guxh/core/__init__.py:
from .sub import *
4.4,guxh.sub_fun()
父子package的init都import *,可同时省略core(package)和sub(module)
guxh/__init__.py:
from guxh.core import *
guxh/core/__init__.py:
from .sub import *
4.5,pandas实例
pandas与本例类似,只不过子package(core)不是用的init而用是通过api中转,core中的init是个空文件
pandas/
|-- __init__.py
|
|-- core/
| |-- __init__.py
| |-- api.py
| |-- frame.py # 含有DataFrame()类
pandas/__init__.py:
from pandas.core.api import *
pandas/core/api.py:
from pandas.core.frame import DataFrame
调用时支持:
df = pandas.DataFrame()
df = pandas.core.frame.DataFrame()
5,动态导入
方法一:
lib = __import__('pandas.core.frame')
df = lib.DataFrame()
方法二:
import importlib
lib = importlib.import_module('pandas.core.frame')
df = lib.DataFrame()
6,惰性导入
只需要在实际需要时才加载组件,可以用惰性导入:
def A():
from .a import A
return A()
guxh的python笔记十:包和模块的更多相关文章
- guxh的python笔记一:数据类型
1,基本概念 1.1,数据类型 基本数据类型:字符串,数字,布尔等 引用数据类型:相对不可变(元组),可变(列表,字典,集合等) 基本数据类型存放实际值,引用数据类型存放对象的地址(即引用) ==:判 ...
- Python:笔记(2)——函数与模块
Python:笔记(2)——函数与模块 Python函数 关于函数 1.我们可以使用Help来查看函数的帮助信息 2.调用函数的时候,如果传入的参数数量或者类型不符合均会报错. 3.函数名其实就是一个 ...
- Python进阶(十二)----re模块
Python进阶(十二)----re模块 一丶re模块 re模块是python将正则表达式封装之后的一个模块.正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行. #正则表达式: ...
- Python进阶(十一)----包,logging模块
Python进阶(十一)----包,logging模块 一丶包的使用 什么是包: 包是通过使用 .模块名的方式组织python模块名称空间的方式. 通俗来说,含有一个__init__.py文件的文 ...
- 关于python中的包,模块导入的问题详解(一)
最近由于初学python,对包,模块的导入问题进行了资料的搜集,查阅,在这里做一个总结: 一: import 模块 在import的过程中发生了什么?我们用一个实验来说明: 以上截图表明:在impor ...
- Python导入自定义包或模块
一般我们会将自己写的 Python 模块与 Python 自带的模块分开存放以达到便于维护的目的. Python 运行环境在查找模块时是对 sys.path 列表进行遍历,如果我们想在运行环境中添加自 ...
- Python学习 之 包和模块
1.rpm -ql python #查看python在计算机中安装了哪些文件 2.模块是一个可以导入的Python脚本文件 包是一堆按目录组织的模块和子包,目录下的__init__.py文件存放了包的 ...
- nodejs学习笔记之包、模块实现
简单了解了node的安装和一些基本的常识之后,今天学习了node中很重要的包和模块的一些知识点. 首先学习一下包的规范,它由包结构和包描述两部分组成.包结构用于组织包的各种文件,包 ...
- python 库 、包 、模块
概念: 模块: 模块是一种以.py为后缀的文件,在.py文件中定义了一些常量和函数.模块的名称是该.py文件的名称.模块的名称作为一个全局变量__name__的取值可以被其他模块获取或导入. 模块的导 ...
随机推荐
- Gym 101981K - Kangaroo Puzzle - [玄学][2018-2019 ACM-ICPC Asia Nanjing Regional Contest Problem K]
题目链接:http://codeforces.com/gym/101981/problem/K Your friend has made a computer video game called “K ...
- JAVA 第四周学习总结
20175303 2018-2019-2 <Java程序设计>第四周学习总结 教材学习内容总结 •用extends来定义一个类的子类. •Object类是所有类的祖先类. •如果子类和父类 ...
- HashMap出现Hash DOS攻击的问题
随着RESTful风格的接口普及,程序员默认都会使用json作为数据传递的方式.json格式的数据冗余少,兼容性高,从提出到现在已被广泛的使用,可以说成为了Web的一种标准.无论我们服务端使用什么语言 ...
- odoo Q-web
文档链接于:https://www.odoo.com/documentation/8.0/reference/qweb.html QWeb is the primary templating engi ...
- asp.net NPOI导出xlsx格式文件,打开文件报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃”
NPOI导出xlsx格式文件,会出现如下情况: 点击“是”: 导出代码如下: /// <summary> /// 将datatable数据写入excel并下载 /// </summa ...
- C#编程基础(简单概述与理解)
1.C#变量和数据输入 C#常用到的几个数据类型: 整型:int 说明:32位有符号整数 范围:-2³¹~2³¹-1 浮点型:double 说明:64位双精度浮点数 范围:±5.0×10-﹣³²~± ...
- java框架之SpringBoot(2)-配置
规范 SpringBoot 使用一个全局的配置文件,配置文件名固定为 application.properties 或 application.yml .比如我们要配置程序启动使用的端口号,如下: s ...
- 11.c#类的成员初始化顺序
转自http://www.cnblogs.com/siceblue/archive/2009/01/15/1376430.html C#作为一种纯面向对象的话言,为它编写的整个代码里面到处都离不开对象 ...
- C#中Abstract和Virtual(转载)
在C#的学习中,容易混淆virtual方法和abstract方法的使用,现在来讨论一下二者的区别.二者都牵涉到在派生类中与override的配合使用. 一.Virtual方法(虚方法) virtual ...
- Docker 基础 (一)
为什么要使用 Docker? 作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势.首先,Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多. 其次,Doc ...