笔记-python-module导入技巧

1.      module导入技巧

1.1.    控制模块导入内容

在模块中定义

__all__ = []

不多言,主要是影响from <> import *

1.2.    延迟导入

作为这一章节的延伸,将介绍延迟导入。如图所示,__init__.py文件一次导入所有必需的组件的。但是对于一个很大的模块,可能你只想组件在需要时被加载。 要做到这一点,__init__.py有细微的变化:

# __init__.py

def A():

from .a import A

return A()

def B():

from .b import B

return B()

在这个版本中,类A和类B被替换为在第一次访问时加载所需的类的函数。对于用户,这看起来不会有太大的不同。 例如:

>>> import mymodule

>>> a = mymodule.A()

>>> a.spam()

A.spam

>>>

延迟加载的主要缺点是继承和类型检查可能会中断。需要稍微改变代码,例如:

if isinstance(x, mymodule.A): # Error

...

if isinstance(x, mymodule.a.A): # Ok

...

1.3.    重新加载模块

有时需要重新加载模块

import imp

imp.reload(mo_test)

它实质是重新编译文件并将变量指向编译后的文件,因为变量指向更新了,在同一进程中的不同线程看来这一变动是共享的,在不同进程中则不然,除非重启进程。

需要注意的是如果其它语句使用from import 格式从同一模块中导入了变量,reload并不会同时更新它,

它也不会重新执行__init__.py中的导入语句,所以如非必要,不要使用它。

>>> from mo_test.mo_test2 import k

>>> k

45

# k值改为56; k = 56

>>> imp.reload(mo_test2)

<module 'mo_test.mo_test2' from 'E:\\python\\code test\\mo_test\\mo_test2\\__init__.py'>

>>> k

45

>>> mo_test.mo_test2.k

56

参考文档:https://docs.python.org/3/library/imp.html

1.4.    动态引入模块

importlib支持传入字符串来引入一个模块。

import importlib

mo_test = importlib.import_module('mo_test')

# 注意返回的是一个模块对象,所以需要声明一下变量,否则会在命名空间中找不到模块变量。

笔记-python-module导入技巧的更多相关文章

  1. python学习笔记之module && package

    个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...

  2. Python库导入错误:ImportError: No module named matplotlib.pyplot

    在Python中导入matplotlib.pyplot时出现如下错误: 在Windows操作系统下解决办法为: 打开命令提示符(按快捷键Win+r ,输入“cmd",回车),输入以下指令即可 ...

  3. python基础===Python 代码优化常见技巧

    Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 8 ...

  4. Python相对导入导致SystemError的解决方案(译)

    原文出处: http://stackoverflow.com/   译文出处:yibohu1899 这个问题是如何解决在相对导入的时候,如果出现’System Error’的时候的解决方案.顺带一提, ...

  5. <转> 30 个有关 Python 的小技巧

    目录[+] 1.1 拆箱 1.2 拆箱变量交换 1.3 扩展拆箱(只兼容python3) 1.4 负数索引 1.5 切割列表 1.6 负数索引切割列表 1.7指定步长切割列表 1.8 负数步长切割列表 ...

  6. python有三种导入模块的方法(转)

    原文:http://www.cnblogs.com/allenblogs/archive/2011/11/15/2055149.html python有三种导入模块的方法 其一, import mod ...

  7. Python : Module

    在Python中,一个.py文件代表一个Module.在Module中可以是任何的符合Python文件格式的Python脚本.了解Module导入机制大有用处. 1 Module 组成 1.1 Mod ...

  8. python模块导入细节

    python模块导入细节 官方手册:https://docs.python.org/3/tutorial/modules.html 可执行文件和模块 python源代码文件按照功能可以分为两种类型: ...

  9. python包导入细节

    包导入格式 导入模块时除了使用模块名进行导入,还可以使用目录名进行导入.例如,在sys.path路径下,有一个dir1/dir2/mod.py模块,那么在任意位置处都可以使用下面这种方式导入这个模块. ...

随机推荐

  1. Sql_Server中如何判断表中某字段是否存在

    --比如说要判断表A中的字段C是否存在两个方法: 一, IF EXISTS ( SELECT 1 FROM SYSOBJECTS T1 INNER JOIN SYSCOLUMNS T2 ON T1.I ...

  2. Saw a tweet from Andrew Liam Trask, sounds like Oxford DeepNLP 2017 class have all videos slides practicals all up. Thanks Andrew for the tip!

    Saw a tweet from Andrew Liam Trask, sounds like Oxford DeepNLP 2017 class have all videos/slides/pra ...

  3. 酷狗音乐PC端怎么使用听歌识曲功能?

    生活中很多时候会听到一些美妙的音乐,耳熟或者动听却不知道它的名字.就像第一眼看到你心动的那个她却不知她叫什么.移动端有酷狗音乐的听歌识曲.现在PC端也有了相同的功能,每当我们看到一部精彩影视剧听到美妙 ...

  4. PointCNN 论文翻译解析

    1. 前言 卷积神经网络在二维图像的应用已经较为成熟了,但 CNN 在三维空间上,尤其是点云这种无序集的应用现在研究得尤其少.山东大学近日公布的一项研究提出的 PointCNN 可以让 CNN 在点云 ...

  5. CRM, C4C和Hybris的工作流简介

    CRM的例子 Step by Step to debug IC inbox workflow WS14000164 C4C Custom recipient determination in work ...

  6. TeXstudio安装后提示no LaTeX distribution found on this system

    应该是设置一下用户变量,而非系统变量,用TeXLive 2015和MikTeX都不好使,最后设置了用户变量好使了 S:\TeX\MiKTeX 2.9\miktex\bin\x64\ 也是醉醉的 不过等 ...

  7. IOS TableView代理设置 table的行高

    // 设置行高(每一行的高度一致) self.tableView.rowHeight = ; self.tableView.delegate = self; #pragma mark - 代理方法 / ...

  8. 最小堆的维护,POJ(2051)

    题目链接:http://poj.org/problem?id=2051 ///维持最小堆(优先队列)POJ2051 #include <iostream> #include <str ...

  9. Java的感受

    感觉Java很重要,但是学起来好像并不比C语言简单.

  10. springmvc中校验框架(hibernate)

    JSR303定义的校验类型 <dependency> <groupId>org.hibernate</groupId> <artifactId>hibe ...