Python:导入模块[重复]

Posted

技术标签:

【中文标题】Python:导入模块[重复]【英文标题】:Python : Importing modules [duplicate] 【发布时间】:2015-10-19 20:55:15 【问题描述】:

有什么区别

import math

from math import *

我是 python 新手,从 codeacademy 学习语言。谁能详细说明区别。谢谢。

【问题讨论】:

你读过the Python tutorial吗? 您可以在上一个问题中找到答案。 ***.com/questions/710551/… 你在 Google 上试试运气了吗? 【参考方案1】:

你应该打开解释器并播放:

>>> 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']
>>> 

【讨论】:

【参考方案2】:

当你做 import math 时,它会导入模块 math ,然后你可以使用 math.<name> 直接使用其中的函数、变量和类。

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

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

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

但请注意,在第二种情况下,它不会导入 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

【讨论】:

【参考方案3】:

import math 中,您必须在输入method 之前声明library

像这样:

math.floor(5.3)

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

floor(5.3)

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

一般我更喜欢第一种方法

【讨论】:

【参考方案4】:

import module 和 from module import foo 之间的区别主要是主观的。选择您最喜欢的一个,并在使用时保持一致。以下几点可以帮助您做出决定。

import module

优点:减少对导入语句的维护。无需添加任何额外的导入即可开始使用模块中的另一个项目

缺点:在代码中键入 module.foo 可能会很乏味且多余(使用 import module as mo 然后键入 mo.foo 可以最大限度地减少乏味)。

从模块导入 foo

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

任何一种方法都可以接受,但不要使用模块import *

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

【讨论】:

以上是关于Python:导入模块[重复]的主要内容,如果未能解决你的问题,请参考以下文章

导入我自己的 python 模块 [重复]

Python:导入模块[重复]

导入模块的最佳方法Python [重复]

导入Python模块的区别[重复]

Python SystemError:父模块''未加载,无法执行相对导入[重复]

导入 numpy 模块时出现 Python 错误 [重复]