前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为什么不建议用 from xxx import *

为什么不建议用 from xxx import *

作者头像
快学Python
发布2022-11-28 14:12:56
4330
发布2022-11-28 14:12:56
举报
文章被收录于专栏:快学Python快学Python

人生苦短,快学Python!

我们在书籍《快学Python:自动化办公轻松实战》中,第一章11节中详细讲解了Python模块的安装与导入。

▲图片作者:Andrew Zhu

其中导入模块有两种常用方法 :import 语句和 from … import 语句。


1、import语句

import语句会导入指定模块中所有的方法,当你需要大量使用该模块中的不同方法时,这种方式很适合你。

代码语言:javascript
复制
import 模块名

此时,当你使用该模块中的方法,则需要在方法名前面加上模块名的前缀。

代码语言:javascript
复制
import math
math.pow(2,4)  

2、from…import语句

如果你只需要使用某个模块中的少数方法,推荐使用from…import语句导入相应的模块。

代码语言:javascript
复制
from 模块名 import 方法名

此时,当你调用模块中的方法时,就不需要在方法名前面添加模块名的前缀。

代码语言:javascript
复制
from math import pow, log
pow(2,4)
log(32,2)

有时候,当你导入的模块名太长,可为它指定一个别名。

别名是模块的另一个名称,类似于外号,语法格式如下所示。

代码语言:javascript
复制
import pandas as pd

我们导入了pandas模块,并指定其别名为pd。


如果使用from 模块名 import *,则表示导入该模块中所有的方法。

代码语言:javascript
复制
from math import *
pow(2,4)

注:使用单下划线“_”开头的模块变量或者函数是受保护的,在使用 from xxx import * 语句从模块中导入时这些变量或者函数不能被导入。

但是,这种用法有两个坑。第一点,正常我们只需看一下文件开头的import语句,就能清楚地知道Python代码中使用了哪些类,干净整洁,如果使用 from xxx import * 语句则会丢失该优点。

第二个坑,便是能引发名称方面的困惑。假如现在Python代码中要用到两个模块kxpython1kxpython2,而这两个模块都有test()函数,如果正常import语句并不会出现什么问题。

代码语言:javascript
复制
import kxpython1
import kxpython2

kxpython1.test(123456)
kxpython2.test(123456)

但是如果使用from xxx import *语句,就芭比Q了。

在交互式环境中输入如下命令:

代码语言:javascript
复制
from kxpython1 import *
from kxpython2 import *

test(123456)

你猜这时候,test()函数用的是哪个模块???

所以,自然会报错了。

这就是我们不建议用 from xxx import * 的原因。虽然我们认为,两个模块有同名导出本身也许是个小概率事件,但能避免还是尽量避免。省得我们最后写Python代码10分钟,找BUG花了一整天。

人生苦短,快学Python!后续我们会继续分享更多的Python基础知识点。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-08-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 快学Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档