从导入同时保留模块访问权限

Sch*_*ote 3 python code-readability python-2.7

标题有点难以理解,但我的问题很简单.

我有一个程序需要采取sqrt()一些东西,但这是我唯一需要的东西math.导入整个模块以获取单个函数似乎有点浪费.

我可以说from math import sqrt,但是然后sqrt()会被添加到我的程序的主命名空间中,我不希望这样(特别是因为我打算将程序改为可用作模块;这样导入会导致那种情况出现问题吗?).有没有办法在保留math.sqrt()语法的同时只导入那个函数?

我在这个特定情况下使用的是Python 2.7,但是如果对Python 3有不同的答案,我也希望听到它以供将来参考.

Vik*_*kez 6

无论哪种方式,您都可以"导入"整个math模块,因为它是编译和存储的sys.modules.因此,如果您进行from math import sqrt比较,则没有任何优化优势import math.他们完全一样.他们导入整个math模块,存储它sys.modules然后唯一的区别是第一个模块将sqrt函数带入你的命名空间,第二个math模块将模块带入你的命名空间.但这些名称只是引用,因此只需从模块中导入一个东西,就不会对内存明智或CPU有利.

如果你想要math.sqrt语法,那么只需使用import math.如果你想要sqrt()语法然后使用from math import sqrt.

如果你关注的是保护模块的用户在他进行星型导入时保护他的命名空间:from your_module import *然后__all__在模块中定义一个变量,该变量是一个字符串列表,表示如果模块的用户执行了一个开始导入将导入的对象.