需要了解:
python模块
python导入模块import(推荐)
概述
除了使用import 模块,在python中还提供from ... import ...方式,该方式可以导入模块的指定函数、类等,并且可以在程序中直接使用
1. from 模块名 import 函数(类)
导入模块的某个类、函数等,出现在py文件的首行代码
格式:
#导入语法,导入多个函数(类)中间用英文逗号“,”分隔
from 模块名 import 函数(类)
#调用模块中的函数
函数名()
例子:
from datetime import datetime
#调用类datetime的方法now()
datetime.now()
2. from 模块名 import * (不提倡)
这种方式不提倡使用,会带来一些问题,一般在控制台环境中使用较多
导入 整个 模块,出现在py文件的首行代码
格式:
#导入语法
from 模块名 import *
#调用模块中的函数
函数名()
可以 直接调用 模块中的 变量、函数、类。
例子:
from datetime import *
#调用类datetime的方法now()
datetime.now()
注意:
不用通过模块名调用
不会导入_开头的 变量、函数
使用from util import *导入模块时,不会导入_开头的全局变量、函数
util.py文件内容如下:
# coding=utf-8
_content='python'
def add(a,b):
return a+b
def _sub(a,b):
return a+b
main.py文件内容如下:
# coding=utf-8
from util import *
print(add(1,2))
print(_content) #报错
print(_sub(2,1)) #报错
执行main.py文件,观察错误
缺点:影响全局变量使用
使用from 模块名 import 函数(类)或from 模块名 import *方式时,在执行文件中修改模块中的变量,会有一些问题
util.py文件内容如下:
# coding=utf-8
content='python'
def fun():
global content
content='good good study'
def fun2():
print('util fun2() content:',content)
main.py文件内容如下:
from util import *
fun()
print("test:",content)
fun2()
content='aaaa'
fun2()
执行main.py,结果如下:
test: python
util fun2() content: good good study
util fun2() content: good good study
总结:
使用
from a import *,在a模块中修改全局变量,只在a模块中起作用使用
from a import *,在main.py不能修改a模块的全局变量
解决方法:
使用import 模块方式
缺点:导入多个有同名函数的模块
使用from 模块名 import 函数(类)或from 模块名 import *方式时,虽然简单,但会带来问题:导入 多个模块 时,多个模块可能会存在 同名类、同名函数,后加载的会 覆盖 先加载的,导致调用时会 发生错误,所以 不推荐
a.py文件内容如下:
# coding=utf-8
def add(a,b):
return a+b
b.py文件内如下:
# coding=utf-8
def add(a,b,c,d):
return a+b+c+d
main.py文件内容如下:
通过from ... import *方式导入a.py和b.py时,
# coding=utf-8
from a import *
from b import *
# 由于a模块、b模块都有同名函数add(),此时b模块是后导入的,所以b模块的add()函数会覆盖a模块的add()函数,也就是说此时无法调用a模块的add()函数
sum=add(1,2,3,4)
print(sum)
解决方法:
使用import 模块方式