笔记-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. js实现弹幕效果

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...

  2. (三)JavaScript之[事件]与[字符串]

    5].事件**JavaScript事件:HTML事件 * HTML事件是发生在HTML元素上的事情 * HTML事件可以是[浏览器的行为],也可以是[用户的行为] * * 实例: * HTML页面完成 ...

  3. [UnityShader]点染队列、ZWrite和ZTest

    转载自:http://www.myexception.cn/mobile/1902628.html [UnityShader]渲染队列.ZWrite和ZTest 参考链接:http://blog.cs ...

  4. [垂直化搜索引擎]lucene简介及使用

    摘自:大型分布式网站架构-设计与实践

  5. git 获取领先落后的命令

    git --git-dir=/data/usr/local/gerrit-site/git/aixuexi-admin.git rev-list --left-right --count master ...

  6. Azure:陪伴你们,是我最长情的告白

    立即访问http://market.azure.cn

  7. oracle中文乱码问题

    1.查看服务器端编码select userenv('language') from dual;我实际查到的结果为:AMERICAN_AMERICA.ZHS16GBK 2.执行语句 select * f ...

  8. COGS 182. [USACO Jan07] 均衡队形

    ★★   输入文件:lineup.in   输出文件:lineup.out   简单对比时间限制:4 s   内存限制:128 MB 题目描述 农夫约翰的 N (1 ≤ N ≤ 50,000) 头奶牛 ...

  9. ubuntu linux查看cpu信息

    $ cat /proc/cpuinfo CPU核心数量 $ grep -c processor /proc/cpuinfo

  10. 【CCPC-Wannafly Winter Camp Day4 (Div1) H】命命命运(概率DP)

    点此看题面 大致题意: 有\(6\)个人玩大富翁,共有\(n\)块地,进行\(500\)轮,已知每个人掷骰子掷出\(1\sim6\)的概率.当某人到达一块未被占领的地时,他可以占领它.求最后每个人占有 ...