找回密码
 会员注册
查看: 39|回复: 0

python中fromimport的用法详解

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
71086
发表于 2024-9-5 23:06:20 | 显示全部楼层 |阅读模式
无论是使用python还是c/c++开发代码时,不可避免的要使用到标准库或者第三方库,这个时候就需要在我们的py文件中调用库,而在python中一般是通过from和import的组合来实现加载第三方库包中的模块或者对象。首先把自己对from和import的使用总结列出,后面再一一进行列举。先强调两个概念:模块,一般而言就是一个独立的py文件,一个模块就是一个py文件,该模块中可以定义类、方法、变量、常量、函数等。对象,在python一切皆对象,字符串,数字、元组、字典、函数、类、方法、模块等都可以称为对象,在本文中对象特指函数、变量、方法等(不指向模块)。对上面的两个概念有了深入的认识,下面把原则列出。import是导入的含义,在python中通过这个关键字可以导入模块,也可以导入模块中的对象(一般指函数、方法、类、变量等),但是需要注意的是import不能导入包。from关键字可以修饰模块名称,也可以修改包的名称,修饰模块名称,则import导入的是对象名称;from关键字修饰包名称,后接的import修饰的是模块名称。使用方法如下:importmodule_namefrompackage_nameimportmodule_namefrommodule_nameimportobject_name1object_name2...frompackage_name.module_nameimportobject_name1object_name2...导入模块的示例:importreimportsys'运行运行上面的语句就是导入re模块和sys模块。通过这种方式可以导入所有在搜索路径(sys.path)中的模块。关于如何自定义模块加入到搜索路径,本专栏下之前的文章也有所介绍,请移步阅读即可。上面的用法很常用,也是我们经常使用的。下面介绍第二种,即加载一个模块下的一个或者多个对象,示例如下:frommodule_nameimportobject_name1ojbecct_name2上面的介绍中module_name特指模块名称,而object_name1、object_name2一般指模块中的变量、函数、方法、类等。即我们可以通过from+import的方式记载一个模块的中指定的函数、方法或者变量。这样做的好处是可以减少内存使用,只加载一个对象与加载模块中所有对象,对内存的消耗还是不一样的;劣势是如果调用模块仅使用被调用模块一个对象或者很少的几个对象,则此种方法可行,但是如果调用模块使用了很多的被调用模块的下对象,此种使用方法就不太友好,因为要针对每个对象添加一句上文中的语句。具体如何使用请根据实际情况进行分析。一个具体的例子fromreimportsearchsearch(xxxx,xxx)#如果不使用此种方式,那么必须按照如下方式使用importrere.search(xxxx,xxx)通过上面具体的例子,可以看出区别了吧。如果通过import导入了对象,那么在代码中使用该对象时可以直接使用对象名称,而无需使用模块前缀,即search;如果仅导入了模块,那么在使用时一定要加入前缀,即re.search。总结无论是使用import还是fromimport,第一个要求是代码能够正常运行,其次,根据代码维护性,团队编码风格来确定选择哪一种方案。如果我们只会使用到某个模块下面的一个函数(或者常量、类)并且名字不会产生混淆,可识别性高,那么from模块名import函数名这没有什么问题。如果我们会用到一个模块下面的多个函数,或者是我们将要使用的函数名、常量名、类名可能会让人产生混淆(例如re.S、re.I),那么这种情况下,import模块名然后再模块名.xxx来调用会让代码更加清晰,更好维护。但无论什么情况下,都禁止使用fromxxximport*这种写法,它会给你带来无穷无尽的噩梦。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-9 06:01 , Processed in 0.417135 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表