Python:导入模块

时间:2015-07-29 03:50:26

标签: python module

之间有什么区别
import math

from math import *

我是python的新手,从codeacademy学习语言。任何人都可以详细说明差异。感谢。

4 个答案:

答案 0 :(得分:0)

你应该打开翻译并玩:

>>> import math
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'math']
>>> from math import *
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'math', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
>>> 

答案 1 :(得分:0)

执行import math时,它会导入模块math,然后您可以使用math.<name>直接在其中使用函数,变量和类。

当你执行from math import *时,它会从模块中导入名称,有两种方法 -

  1. 如果模块定义了__all__列表,则会从该列表中导入名称。

  2. 否则,它会导入所有其他变量,函数,类,但不导入子模块(如果有的话)。

  3. 但请注意,在第二种情况下,它不会导入math模块,而是从其中导入名称。因此,您只需使用math.<name>,而不是使用<name>

    请注意,from <module> import *通常被认为是不好的。您可以在此查看原因 - Why is "import *" bad?

    示例行为 -

    >>> import math
    >>> math.ceil(1.2)
    2
    
    >>> from math import *
    >>> ceil(1.2)
    2
    

答案 2 :(得分:0)

import math

,您必须在输入library之前说明method

像这样:

math.floor(5.3)

但是使用from import math *,您正在使用直接来自该库的方法,因此您只需输入以下内容:

floor(5.3)

第二种方法可以节省输入,但如果您不小心将method命名为与library中的某个方法一致,则会遇到一些问题。关于方法的作用,第一个库也更具有特定清晰。同样使用第一种方法,如果使用第二种方法,则无需添加额外的imports项目。

一般来说,我更喜欢第一种方法

答案 3 :(得分:0)

导入模块和模块导入foo之间的区别主要是主观的。选择你最喜欢的那个,并在使用它时保持一致。以下是一些可以帮助您做出决定的要点。

import module
  • 优点:减少对import语句的维护。不需要添加任何其他导入来开始使用模块中的其他项目

    • 缺点:在您的代码中输入module.foo可能会很乏味且冗余(通过使用导入模块作为mo然后输入mo.foo可以最小化单调)。

    来自模块导入foo

    • 优点:使用fooMore控制可以访问模块的哪些项目的输入较少
    • 缺点:要使用模块中的新项目,您必须更新import语句,您将失去有关foo的上下文。例如,与math.ceil()
    • 相比,ceil()的作用还不太清楚

这两种方法都可以接受,但不要使用模块import *

对于任何合理的大型代码集,如果导入*,您可能会将其粘贴到模块中,无法删除。这是因为很难确定代码中使用的项目来自“模块”,因此很容易达到您认为不再使用导入的程度,但是很难确定。< / p>