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笔记十:包和模块的更多相关文章

  1. guxh的python笔记一:数据类型

    1,基本概念 1.1,数据类型 基本数据类型:字符串,数字,布尔等 引用数据类型:相对不可变(元组),可变(列表,字典,集合等) 基本数据类型存放实际值,引用数据类型存放对象的地址(即引用) ==:判 ...

  2. Python:笔记(2)——函数与模块

    Python:笔记(2)——函数与模块 Python函数 关于函数 1.我们可以使用Help来查看函数的帮助信息 2.调用函数的时候,如果传入的参数数量或者类型不符合均会报错. 3.函数名其实就是一个 ...

  3. Python进阶(十二)----re模块

    Python进阶(十二)----re模块 一丶re模块 ​ re模块是python将正则表达式封装之后的一个模块.正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行. #正则表达式: ...

  4. Python进阶(十一)----包,logging模块

    Python进阶(十一)----包,logging模块 一丶包的使用 什么是包: ​ 包是通过使用 .模块名的方式组织python模块名称空间的方式. 通俗来说,含有一个__init__.py文件的文 ...

  5. 关于python中的包,模块导入的问题详解(一)

    最近由于初学python,对包,模块的导入问题进行了资料的搜集,查阅,在这里做一个总结: 一: import 模块 在import的过程中发生了什么?我们用一个实验来说明: 以上截图表明:在impor ...

  6. Python导入自定义包或模块

    一般我们会将自己写的 Python 模块与 Python 自带的模块分开存放以达到便于维护的目的. Python 运行环境在查找模块时是对 sys.path 列表进行遍历,如果我们想在运行环境中添加自 ...

  7. Python学习 之 包和模块

    1.rpm -ql python #查看python在计算机中安装了哪些文件 2.模块是一个可以导入的Python脚本文件 包是一堆按目录组织的模块和子包,目录下的__init__.py文件存放了包的 ...

  8. nodejs学习笔记之包、模块实现

        简单了解了node的安装和一些基本的常识之后,今天学习了node中很重要的包和模块的一些知识点.       首先学习一下包的规范,它由包结构和包描述两部分组成.包结构用于组织包的各种文件,包 ...

  9. python 库 、包 、模块

    概念: 模块: 模块是一种以.py为后缀的文件,在.py文件中定义了一些常量和函数.模块的名称是该.py文件的名称.模块的名称作为一个全局变量__name__的取值可以被其他模块获取或导入. 模块的导 ...

随机推荐

  1. ES6中Set 和 Map用法

    JS中Set与Map用法 一.Set 1.基本用法 ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. ...

  2. Fiddler_内置命令行_03

    Fiddler左下角有一个命令框  [基础命令] [举例说明] ? 回车之后,匹配的内容如下图 stop [断点命令] FIddler断点功能就是将请求截获下来,但是不发送,这个时候你可以干很多事情, ...

  3. Windows10 家庭版 关闭Windows defender

    管理员权限打开cmd,输入下面命令: reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender&quo ...

  4. 学习笔记:Makefile的ifeq逻辑或,逻辑与的变通实现

        (1)ifeq的用法 ifeq ($(变量名), 变量值 ) ........ else ifeq ($(..), ..) ......... else ......... endif (2) ...

  5. airsim 无法打开包括文件corecrt.h

    原因: 显示无法打开包括文件corecrt.h.在网上找了很多方法,最后综合起来发现,这个问题网上很多人反映,应该是vs2015的一个BUG,如果是选择"从父级或项目默认设置继承" ...

  6. Python基础(十二) 类私有成员和保护成员

    python中的protected和private python中用 _var :变量名前一个下划线来定义,此变量为保护成员protected,只有类及其子类可以访问.此变量不能通过from XXX ...

  7. python 发送email邮件带附件

    EMAIL功能实现: 1.发送EMAIL带附件,并且带压缩文件夹做为附件 #_*_coding:utf-8_*_ import smtplib from email.mime.text import ...

  8. 细说flask数据库迁移

    什么情况下要用数据库迁移? 在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库.最直接的方式就是删除旧表,但这样会丢失数据. 更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化 ...

  9. netframework webapi exceptionless

    1.webapi项目 添加nuget    exceptionless webapi 2.在exceptionless server端添加项目,注意key 3.修改api项目的webconfig &l ...

  10. ASP.NET MVC案例教程(五)

    ASP.NET MVC案例教程(四) 前言 通过前几篇文章,我们已经能比较自如的使用ASP.NET MVC来呈现页面和数据了.但是,有一个大问题没有解决:如何处理表单数据.例如,我们将要实现的公告发布 ...