终于学会Python?别闹了,本文中的对象你搞懂了吗?
这里,我们将 sys模块导入至全局浸染域,但我们并没有行使这个模块。然后,在square_root函数中,我们将math模块导入至该函数的局部浸染域,这意味着math模块只能在square_root函数内部行使。假如我们试图在my_pow函数中行使math,会激发NameError。试着执行这个剧本,看看会产生什么。 行使局部浸染域的甜头之一,是你行使的模块也许必要很长时刻才气导入,假如是这样的话,将其放在某个不常常挪用的函数中或者越发公道,而不是直接在全局浸染域中导入。诚恳说,我险些从没有行使过局部导入,首要是由于假如模块内部处处都有导入语句,会很难判别出这样做的缘故起因和用途。按照约定,全部的导入语句都应该位于模块的顶部。 导入留意事项 在导入模块方面,有几个措施员常犯的错误。这里我们先容两个。
先来看看轮回导入。 轮回导入 假如你建设两个模块,二者彼此导入对方,那么就会呈现轮回导入。譬喻:
然后在同个文件夹中建设另一个模块,将其定名为 b.py。
假如你运行恣意一个模块,城市激发 AttributeError。这是由于这两个模块都在试图导入对方。简朴来说,模块a想要导入模块b,可是由于模块b也在试图导入模块a(这时正在执行),模块a将无法完成模块b的导入。我看过一些办理这个题目的破解要领(hack),可是一样平常来说,你应该做的是重构代码,停止产生这种环境。 包围导入 当你建设的模块与尺度库中的模块同名时,假如你导入这个模块,就会呈现包围导入。举个例子,建设一个名叫 math.py的文件,在个中写入如下代码:
此刻打开终端,试着运行这个文件,你会获得以下回溯信息(traceback):
这到底是怎么回事?着实,你运行这个文件的时辰,Python表明器起首在当前运行剧本所处的的文件夹中查找名叫 math的模块。在这个例子中,表明器找到了我们正在执行的模块,试图导入它。可是我们的模块中并没有叫sqrt的函数或属性,以是就抛出了AttributeError。 总结 在本文中,我们讲了许多有关导入的内容,可是尚有部门内容没有涉及。PEP 302中先容了导入钩子(import hooks),支持实现一些很是酷的成果,好比说直接从github导入。Python尺度库中尚有一个importlib模块,值得查察进修。虽然,你还可以多看看别人写的代码,不绝发掘更多好用的妙招。
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |