python编程学习进度九

       今天学习的是关于高级模块的内容,关于这个高级模块我不是太了解,下面是我学习之后的一些总结:其中有相关解释和常常容易踏入的陷阱。_X的命名方式可以防止from *导入这个变量,然而这种方法不能阻止其他导入方式的导入,并不是一些面向对象语言中的私有声明。__all__会列出from *复制的变量名,与_X正相反。同样只对from *有效,不是私有声明。from __feature__ import featurename还不是很理解,好象是用选用扩展功能的方式开启特殊的代码编译。模块可以通过检测自己的__name__是否为"__main__"确定它是在执行还是被导入。这样可以让模块在扮演两种不同角色时发挥不同功能。相对导入:路径以一个点开始,定位同一个包的模块。可以开启__feature__中强迫导入的绝对性。很类似于Linux,两个点表示上一级路径。

陷阱一:顶层代码的语句次序。被import时模块的顶层代码会立即执行,此时它所引用后文定义的变量将无效。

陷阱二:字符串变量是不能直接用于import语句的。可以使用exec "import" + modname来使用字符串modname。这样做仍然有个缺点,每次执行时必须编译import语句。更好的代替方案是string = __import__(modname),然后把string单列一行执行即可。

陷阱三:from复制变量名而不是拷贝。

#nested1.py
X = 99
def printer():print X

#nested2.py
from nested1 import X,printer
X = 88
printer()

%python nested2.py
99

陷阱四:reload不影响from导入。为了更新变量,使用.运算符来导入和修改其他模块的变量。

陷阱五:reload、from及交互模式测试。这部分比较有启发性,建议在原书仔细阅读,简要概括就还是:导入后(模块)要重载(模块),重载后还要重新执行import(变量)。reload和from的合作并不完美,最佳原则是使用reload和import来启动程序。

原文地址:https://www.cnblogs.com/lover995/p/12289038.html