执行“from xyz import Abc”时,解释器会做什么?

时间:2012-08-13 11:58:15

标签: python-2.7 python-2.x python

在这些案件中,口译员做了什么?

  1. from xyz import Abc
  2. from xyz import *
  3. 是否必须解析完整的文件xyz.py?一种方式应该比另一种更快吗?或者仅仅是可读性问题,人们更喜欢第一种方法到第二种方法?

2 个答案:

答案 0 :(得分:5)

在性能方面不应该有任何区别,因为必须以任何一种方式处理整个模块。

区别在于可读性和命名空间的污染。为了最大限度地减少名称冲突的可能性以及由于名称隐藏而导致的意外行为,谨慎的做法是仅导入您实际使用的那些对象。

来自Martijn Pieters

  

您导入模块的所有顶级名称也可以从该模块再次导入   除非已设置__all__参数。因此,你通常会得到更多的物品   添加到您的本地命名空间而不是您为

讨价还价

答案 1 :(得分:2)

每个命令后命名空间的差异:

>>> from math import *
>>> len(vars())
46
>>> vars()
{'pow': <built-in function pow>, 'fsum': <built-in function fsum>, 'cosh': <built-in function cosh>, 'ldexp': <built-in function ldexp>, 'hypot': <built-in function hypot>, 'acosh': <built-in function acosh>, 'tan': <built-in function tan>, 'asin': <built-in function asin>, 'isnan': <built-in function isnan>, 'log': <built-in function log>, 'fabs': <built-in function fabs>, 'floor': <built-in function floor>, 'atanh': <built-in function atanh>, 'sqrt': <built-in function sqrt>, '__package__': None, 'frexp': <built-in function frexp>, 'factorial': <built-in function factorial>, 'degrees': <built-in function degrees>, 'pi': 3.141592653589793, 'log10': <built-in function log10>, '__doc__': None, 'asinh': <built-in function asinh>, 'fmod': <built-in function fmod>, 'atan': <built-in function atan>, '__builtins__': <module '__builtin__' (built-in)>, 'copysign': <built-in function copysign>, 'cos': <built-in function cos>, 'ceil': <built-in function ceil>, 'atan2': <built-in function atan2>, 'isinf': <built-in function isinf>, 'sinh': <built-in function sinh>, '__name__': '__main__', 'trunc': <built-in function trunc>, 'expm1': <built-in function expm1>, 'e': 2.718281828459045, 'tanh': <built-in function tanh>, 'radians': <built-in function radians>, 'sin': <built-in function sin>, 'lgamma': <built-in function lgamma>, 'erf': <built-in function erf>, 'erfc': <built-in function erfc>, 'modf': <built-in function modf>, 'exp': <built-in function exp>, 'acos': <built-in function acos>, 'log1p': <built-in function log1p>, 'gamma': <built-in function gamma>}


>>> ================================ RESTART ================================


>>> from math import log10
>>> len(vars())
5
>>> vars()
{'__builtins__': <module '__builtin__' (built-in)>, '__package__': None, '__name__': '__main__', 'log10': <built-in function log10>, '__doc__': None}