返回介绍

模块陷阱

发布于 2024-01-29 22:24:15 字数 783 浏览 0 评论 0 收藏 0

本节中,我们要看一看会让Python初学者生活多点乐趣的常见的极端案例。有些很罕见,很难举例说明,但大多数都示范了语言中重要的部分。

顶层代码的语句次序的重要性

当模块首次导入(或重载)时,Python会从头到尾执行语句。这里有些和前向引用(forward reference)相关的含义,值得在此强调:

·在导入时,模块文件顶层的程序代码(不在函数内)一旦Python运行到时,就会立刻执行。因此,该语句是无法引用文件后面位置赋值的变量名。

·位于函数主体内的代码直到函数被调用后才会运行。因为函数内的变量名在函数实际执行前都不会解析,通常可以引用文件内任意地方的变量。

一般来说,前向引用只对立即执行的顶层模块代码有影响,函数可以任意引用变量名。以下是示范前向引用的例子。

当这个文件导入时(或者作为独立程序运行时),Python会从头到尾运行它的语句。对func1的首次调用失败,因为func1 def尚未执行。只要func1调用时,func2的def已运行过,在func1内对func2的调用就没有问题(当第二个顶层func1调用执行时,fun2的def还没有运行)。文件末尾最后对func1的调用可以工作,因为func1和func2都已经赋值了。

在顶层程序内混用def不仅难读,也造成了对语句顺序的依赖性。作为一条原则,如果需要把立即执行的代码和def一起混用,就要把def放在文件前面,把顶层代码放在后面。这样的话,你的函数在使用的代码运行的时候,可以保证它们都已定义并赋值过了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文