import的使用
3种用法
- from import 导入模块方法
- import直接导入模块
区分import和from import
- import导入工具包
import re
target = 'abc1234xyz'
re.search('(\d+)', target)
- from导入工具包
from re import search
target = 'abc1234xyz'
search('(\d+)', target)
注意,不管通过什么方式导入什么东西,一定要看导入语句的最后一个东西。
结果:
- 直接使用import re导入的re它是一个
module类
,也就是模块
。我们把它成为正则表达式模块
。 - 而当我们from re import search时,这个search是一个
function类
,我们称呼它为search 函数
。
二者在使用的时候的方法有区别
import导入的可以通过类似对象.方法的形式进行使用
import datetime
now = datetime.datetime.now()
one_hour_ago = now - datetime.timedelta(hours=1)
- from导入的就已经是函数了,直接调用即可
from datetime import datetime, timedelta
now = datetime.now()
one_hour_ago = now - timedelta(hours=1)
dir() 函数 (开箱检查)
内置的函数 dir() 可以找到模块内定义的所有名称。
常见错误
TypeError: 'module' object is not callable
from … import 语句
Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中
很可能就是导入包的姿势不对。
通常导包的方法:
from 包名.模块名 import 类名/方法名
- 包名就是文件夹名
- 模块名就是python文件名
总结
-
无论是使用import还是from import,第一个要求是代码能够正常运行,其次,根据代码维护性,团队编码风格来确定选择哪一种方案。
-
如果我们只会使用到某个
模块下面的一个函数
(或者常量、类)并且名字不会产生混淆,可识别性高,那么from 模块名 import 函数名这没有什么问题。 -
如果我们会用到
一个模块下面的多个函数
,或者是我们将要使用的函数名、常量名、类名可能会让人产生混淆(例如 re.S、re.I),那么这种情况下,import 模块名然后再 模块名.xxx来调用会让代码更加清晰,更好维护。 -
但无论什么情况下,都禁止使用from xxx import *这种写法,它会给你带来无穷无尽的噩梦。
最后还想说
感觉导入的东西其实差不多,能用就行啦
你只能导入一个模块或者一个函数或者一个类,不能导入一个文件夹
使用的方式不一样