2015-07-29 5 views
2

В чем разница междуPython: Импорт модулей

import math 

и

from math import * 

Я новичок в Python и изучение языка с codeacademy.Can кого уточнить разницу. Благодарю.

+2

Вы читали [учебник Python] (https://docs.python.org/2/tutorial/modules.html)? – BrenBarn

+2

Ответ можно найти в предыдущем вопросе. http://stackoverflow.com/questions/710551/import-module-or-from-module-import –

+0

Вы испытали удачу в Google? – TigerhawkT3

ответ

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

Когда вы import math, она импортирует модуль math, то вы можете использовать функции, переменные и классы непосредственно внутри него с помощью math.<name>.

Когда вы from math import *, он импортирует имена внутри модуля, есть два пути для этого -

  1. Если модуль определяет __all__ список, он импортирует имена из в этом списке.

  2. 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 
0

в import math, вы должны указать library, прежде чем войти в method.

Как это:

math.floor(5.3) 

Но с from import math *, вы используете методы непосредственно из этой библиотеки, поэтому все, что вам нужно ввести следующий:

floor(5.3) 

Второй метод экономит набрав, хотя вы можете столкнуться с некоторыми проблемами, если вы случайно назовете method, который совпадает с одним из методов из этого library. В первой библиотеке также больше и ясно относительно того, что делают методы. Также с первым методом вам не нужно добавлять дополнительные imports элементов, которые вам понадобятся, если вы использовали второй метод.

Обычно я предпочитаю первый способ.

0

Разница между модулем импорта и модулем import foo в основном субъективна.Выберите тот, который вам больше нравится, и будьте последовательны в его использовании. Вот несколько моментов, которые помогут вам решить.

import module 
  • Pros: Меньше обслуживание ваших операторов импорта. Не нужно добавлять дополнительный импорт, чтобы начать использовать другой элемент из модуля

    • Против: Typing module.foo в вашем коде может быть утомительным и излишним (скука может быть сведена к минимуму с помощью модуля импорта, как мо затем набрав mo.foo).

    от импорта модуля обув

    • Pros: Меньше типирование использовать контроль fooMore над которым элементы модуля могут быть доступны
    • Против: Для того, чтобы использовать новый элемент из модуля вам нужно обновить свой оператор импорта, вы теряете контекст о foo. Например, это менее ясно, что CEIL() не по сравнению с Math.ceil()

метод Либо это приемлемо, но не использовать из модуля import *

Для любого разумного большого набора код, если вы импортируете *, вы, вероятно, будете цементировать его в модуль, который не может быть удален. Это связано с тем, что трудно определить, какие элементы, используемые в коде, поступают из «модуля», что позволяет легко добраться до точки, когда вы думаете, что больше не используете импорт, но это очень сложно.

Смежные вопросы