在 python 用 import 或者 from...import 来导入相应的模块。
将整个模块(somemodule)导入,格式为: import somemodule
从某个模块中导入某个函数,格式为: from somemodule import somefunction
从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc
将某个模块中的全部函数导入,格式为: from somemodule import *
区别:
· 区别1
import module 引用共享变量时,要使用module.变量名。
而from module import * 直接使用变量名即可
· 区别2(有点绕)
import module方式操作module的变量时,本地不会创建新变量,操作的是目标模块的变量!
from module import *方式操作module变量时,实质上是在本地创建一个与目标模块相同的变量名,并且默认与目标模块变量指向同一个内存空间。
看似功能一样,但是在开发中稍不注意可能会排bug排到头皮发麻!
用一个小示例说明!
先建立一个module.py,里面就一个公共变量,a = []。
然后我们用import module方式先操作module的变量,再打印,看下有没变化。
import module
module.a = [1,2,3]
print(module.a)
from module import a
print(a)
输出:
[1, 2, 3]
[1, 2, 3]
看似很平常,正常操作,但是,继续看!
from module import a
a = [1,2,3]
print(a)
import module
print(module.a)
输出:
[1, 2, 3] # 结果不同了!
[]
怎么调一下位置,就输出不一样了?
因为!from module import 方式是自己创建了一个自己的变量a指向module.a的内存空间。当执行命令a = [1,2,3]时,变量a赋值了,重新分配了内存空间。并不是module文件里的a变量重新分配空间,所以odule文件里的a变量的值没有变化!
而import module方式是操作module文件里面a的变量,即使进行了赋值,重新分配了内存空间,但是他还是module里面的变量。所以当别人导入module的时候,module.a的值就是[1,2,3]了!
*建议!开发中,如果有操作公共变量的情况,一定要全部都用import module方式!