import语句
import语句是使一个变量名引用整个模块对象,我们必须通过模块名称来得到该模块的属性.
比如说得到requests中的get函数应该这样写
import requests
r = requests.get(url)
from语句
from语句会把变量名复制到另一个作用域,所以它就可以让我们直接在脚本中使用复制后的变量名,而不需要通过模块.
实现与上面例子完全一样的功能,from需要这样写
from requests import get
r = get(url)
特殊的from形式: from *
当我们使用 * 的时候,会取得模块顶层所有赋了值的变量名的拷贝.在脚本中使用的时候复制后得到的变量名,不需要模块名
from requests import *
r = post(url)
t = get(url)
from语句和import语句有什么关系?
答:
form语句是导入整个模块,就像Import语句那样,但是还有个步骤,就是会从被导入的模块中,复制一个或多个变量到from语句所在的作用域中.这样可以让你直接使用被导入的变量名(name),而不是通过模块来使用变量名(module.name)
什么时候必须使用import,不能使用from?
答:
当需要读取两个不同的模块中的相同变量的时候,就必须使用import,而不能使用from,因为你必须制定变量名所在的模块,从而保证着两个变量名是独特的.
from语句有什么的潜在陷阱?
答:
- from会让变量的含义模糊(究竟是哪个模块定义的)
- 通过reload函数重载模块的时候会有问题(变量名还是引用对象之前的版本吗)
- 会破坏命名空间(可能悄悄地覆盖掉正在使用的重名的变量名)
- from * 形式在大多数情况下都很糟糕,会严重污染命名空间.让变量的意义变得非常的模糊,请尽量少用.