Python中import和from的一些事。。。

  摘自python学习手册, 用于记录。python

  客户端能够执行import或from语句。若是模块尚未加载,这两个语句会去搜索、编译以及执行模块文件程序。主要差异在于,import会读取整个模块,因此必须进行定义后才能读取它的变量名;from将获取(或者是复制)模块特定的变量名。学习

  import使一个变量名引用整个模块对象,所以必须经过模块名称来获得该模块的属性(例如,module1.printer)。而from会把变量名复制到另外一个做用域,因此它就能够直接在脚本中使用复制后的变量名,而不用经过模块(例如,printer)。对象

  from语句有破坏命名空间的潜质。若是使用from导入变量,而那些变量碰巧和做用域中现有变量重名,变量就会被悄悄的覆盖掉。使用import语句时就不存在这种问题,由于必须经过模块名才能获取其内容。不过,使用from时,只要你了解并预料到可能发生这种事,在实际状况下这就不是一个大问题了,尤为是当你明确列出导入变量名时(例如,from module import x, y, z)。作用域

  另外一方面,和reload调用同时使用时,from语句有比较严重的问题,由于导入的变量名可能引用以前版本的对象。再者,from module import *形式的确可能破坏命名空间,让变量名难以理解,尤为是在导入一个以上的文件时。编译

  比较务实的建议是:简单的模块通常倾向于使用import,而不是from。多数的from语句是用于明确列举想要的变量,并且限制在每一个文件中只用一次from *形式。这样一来,任何无定义的变量名均可以认为是存在于from *所引用的模块内。当你必须使用两个不一样模块内定义的相同变量名变量时,才真的必须使用import,这种状况下不能使用from。import

相关文章
相关标签/搜索