В чем разница междуPython: Импорт модулей
import math
и
from math import *
Я новичок в Python и изучение языка с codeacademy.Can кого уточнить разницу. Благодарю.
В чем разница междуPython: Импорт модулей
import math
и
from math import *
Я новичок в Python и изучение языка с codeacademy.Can кого уточнить разницу. Благодарю.
Вы должны открыть интерпретатор и играть:
>>> 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']
>>>
Когда вы import math
, она импортирует модуль math
, то вы можете использовать функции, переменные и классы непосредственно внутри него с помощью math.<name>
.
Когда вы from math import *
, он импортирует имена внутри модуля, есть два пути для этого -
Если модуль определяет __all__
список, он импортирует имена из в этом списке.
Else, он импортирует все другие переменные, функции, классы, но не подмодули (если есть).
Но обратите внимание, во втором случае, он не импортирует 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
в import math
, вы должны указать library
, прежде чем войти в method
.
Как это:
math.floor(5.3)
Но с from import math *
, вы используете методы непосредственно из этой библиотеки, поэтому все, что вам нужно ввести следующий:
floor(5.3)
Второй метод экономит набрав, хотя вы можете столкнуться с некоторыми проблемами, если вы случайно назовете method
, который совпадает с одним из методов из этого library
. В первой библиотеке также больше и ясно относительно того, что делают методы. Также с первым методом вам не нужно добавлять дополнительные imports
элементов, которые вам понадобятся, если вы использовали второй метод.
Обычно я предпочитаю первый способ.
Разница между модулем импорта и модулем import foo в основном субъективна.Выберите тот, который вам больше нравится, и будьте последовательны в его использовании. Вот несколько моментов, которые помогут вам решить.
import module
Pros: Меньше обслуживание ваших операторов импорта. Не нужно добавлять дополнительный импорт, чтобы начать использовать другой элемент из модуля
от импорта модуля обув
метод Либо это приемлемо, но не использовать из модуля import *
Для любого разумного большого набора код, если вы импортируете *, вы, вероятно, будете цементировать его в модуль, который не может быть удален. Это связано с тем, что трудно определить, какие элементы, используемые в коде, поступают из «модуля», что позволяет легко добраться до точки, когда вы думаете, что больше не используете импорт, но это очень сложно.
Вы читали [учебник Python] (https://docs.python.org/2/tutorial/modules.html)? – BrenBarn
Ответ можно найти в предыдущем вопросе. http://stackoverflow.com/questions/710551/import-module-or-from-module-import –
Вы испытали удачу в Google? – TigerhawkT3