一、模块分为三大类:
1、内置的模块
import time
import sys
2、第三方的模块
import 第三方1
import 第三方2
3、自定义的模块
import 自定义模块1
import 自定义模块2
import 自定义模块3
二、import …和from …import…
1、import …
import …首次导入模块发生的三件事(假设导入的是test.py模块):
1、执行test.py
2、产生test.py的名称空间,将test.py运行过程中产生的名字都丢到test的名称空间中
3、在当前文件中产生的有一个名字test,该名字指向2中产生的名称空间
导包的格式:
1、import 模块名
2、import 模块名1,模块名2,模块名3(导入多个模块,可以用都好隔开)
导入特别长的模块名可以用as后定义一个简单的模块名来代替,就是起别名
import configuration as f
f.x
f.func1()
f.func2()
impot…导入模块在使用时必须加前缀"模块."
优点:肯定不会与当前名称空间中的名字冲突
缺点:加前缀显得麻烦
2、from…import…
from … import …导入也发生了三件事(假设导入的是test.py):
1、产生一个模块的名称空间
2、运行test.py将运行过程中产生的名字都丢到模块的名称空间去
3、在当前名称空间拿到一个名字,该名字与模块名称空间中的某一个内存地址
test.py文件
x = 1
def get():
return x
def change():
global x
x = 0
return x
main.py文件
from foo import change
from foo import get
from foo import x
print(x)
print(get())
print(change())
x = 333333333
print(x)
print(get())
print(change())
print(get())
结果:
1
1
0
333333333
0
0
0
一行导入多个名字(不推荐)
from test import x,get,change
*:导入模块中的所有名字
from test import *
起别名
from test import get as g
from…impot…导入模块在使用时不用加前缀
优点:代码更精简
缺点:容易与当前名称空间混淆
all:指明只能使用哪些名称空间里的变量或者函数
test.py文件
__all__ = ['x', ] # 控制*代表的名字有哪些
x = 1
def get():
return x
def change():
global x
x = 0
return x
main.py文件
from foo import *
print(x)
print(get)
print(change)
结果:
1
NameError: name 'get' is not defined