在保留modu访问权限的同时从导入

2024-06-10 02:54:06 发布

您现在位置:Python中文网/ 问答频道 /正文

题目有点难理解,但我的问题很简单。你知道吗

我有一个程序需要获取某些东西的sqrt(),但这是我从math需要的唯一东西。导入整个模块来获取单个函数似乎有点浪费。你知道吗

我可以说from math import sqrt,但是sqrt()会被添加到我的程序的主名称空间中,我不希望这样(特别是因为我计划将程序更改为可用的模块;这样导入会不会在这种情况下引起问题?)。有没有办法只导入那一个函数,同时仍然保留math.sqrt()语法?你知道吗

在这个特定的例子中,我使用的是python2.7,但是如果python3有不同的答案,我也希望听到这些,以供将来参考。你知道吗


Tags: 模块函数fromimport程序名称语法浪费
3条回答

无论哪种方式,您都可以“导入”完整的math模块,因为它被编译并存储在sys.modules中。因此,与import math相比,如果你做from math import sqrt,你没有任何优化的好处。他们做的完全一样。它们导入整个math模块,将其存储sys.modules,唯一的区别是第一个模块将sqrt函数引入命名空间,第二个模块将math模块引入命名空间。但是这些名称只是引用,所以从模块中只导入一个东西不会对内存和CPU带来好处。你知道吗

如果您想要math.sqrt语法,那么只需使用import math。如果需要sqrt()语法,那么使用from math import sqrt。你知道吗

如果您关心的是保护模块用户在执行星型导入时不会污染其命名空间:from your_module import *,那么请在模块中定义一个__all__变量,该变量是表示在模块用户执行启动导入时将导入的对象的字符串列表。你知道吗

math import sqrt使用。可以使用__all__语句保护从模块导出的函数。__all__应该是要从模块导出的名称列表。你知道吗

简言之,答案是否定的。只要做from math import sqrt。如果将脚本用作模块,则不会导致任何问题,并且不会降低代码的可读性。你知道吗

相关问题 更多 >