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

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

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

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

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

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

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

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

点赞