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:导入模块[重复]的主要内容,如果未能解决你的问题,请参考以下文章