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

  摘自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。

转载于:https://www.cnblogs.com/hwf-73/p/5493328.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值