Python-2014.11.8

data:2014.11.08

接着昨天的内容继续,这几篇的文章其实都是摘自Python核心编程这本书的,还有一本Python的技术手册,个人建议看完这本核心编程后再去看技术手册,理解的会更好一点。

1. globals() ,locals()内建函数分别返回调用者全局和局部名称空间的字典,在一个函数内调用globals()函数就是调用全局的名称空间,locals()则是代表函数执行时定义的所有名字的字典。在全局空间下调用两个函数的值是一样的。可以使用globals().keys()来获得字典的键,也就是定义的名称。

2. reload()函数,语法为reload(modulename)需要注意的是参数必须是一个模块名,且不是字符串而是一个对象,另外只能导入一个模块,与import不同的是reload()函数会被重复加载。

3. package:有几种导入形式 第一种是 import phone.mobile.analog   使用时需phone.mobile.analog.function();第二种方法是使用from-import方法,只导入子包,然后通过子包调用 ‘.’点号访问。或者是一直导入 最后import其方法或属性。 另外,一个包下面都会有__init__.py初始化文件,没有会引发importwaring信息。

4. from package.module import * 可以这么定义,但是具体导入哪些文件,则取决于操作系统。这样我们要在__init__.py文件中加入__all__变量,该变量包含了在引入时导入哪些模块的名称组成的列表。默认绝对导入,就是要写上包目录的绝对路径。

5. 相对导入是在引用的包之前加点号来实现的,相对于根目录采用一个或者两个点进行,下面是核心编程的例子:

from Phone.Mobile.Analog import dial
from .Analog import dial
from ..common_util import setup
from ..Fax import G3.dial

6. sys.modules变量包含了一个由当前载入(完成且成功导入的模块),可以使用sys.modules.keys()来得到一个字典。

7. 在from module import * ,如果你不想让你的某一个模块的属性被导入,你可以在该属性前面加一个下划线(_),但是你在使用全部导入 import module 或者是显性的导入时,它将失去作用。

8. 编码上,你可以在模块头部加一个额外的编码指示说明就可以让导入者使用指定的编码解析你的模块,对应相应的Unicode字符。有个小技巧就是在Eclipse中的模板中把这一条加上,这样就不用每次都写了。

9. 对于一些模块导入时会用到的辅助的模块只注意一个modulefinder模块和ModuleFinder类就可以了,提到这两个类是因为这可以用来构造一个简单的模块引用关系图,正如开源社区上提供的那些程序一样。

10. 模块其实就是一个组织方式,里面的命名空间和变量域要深入的理解,了解各种导入的方式,以及导入的顺序和原理等。一个好的建议就是在模板中尽量少导入模块。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。