python导入模块from...import...

需要了解:
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
总结:
  1. 使用from a import *,在a模块中修改全局变量,只在a模块中起作用

  2. 使用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 模块方式


原文出处:/show_1EF3i8MxfXbw.html