python中from import的用法详解

本文介绍了Python中from和import的关键概念,包括模块与对象的区别,以及它们在导入时的不同使用方法。重点讨论了如何根据代码需求和维护性选择合适的导入策略,强调了避免使用`from...import*`的必要性。
摘要由CSDN通过智能技术生成


无论是使用python还是c/c++开发代码时,不可避免的要使用到标准库或者第三方库,这个时候就需要在我们的py文件中调用库,而在python中一般是通过from和import的组合来实现加载第三方库包中的模块或者对象。

首先把自己对from和import的使用总结列出,后面再一一进行列举。

先强调两个概念:

  • 模块,一般而言就是一个独立的py文件,一个模块就是一个py文件,该模块中可以定义类、方法、变量、常量、函数等。
  • 对象,在python一切皆对象,字符串,数字、元组、字典、函数、类、方法、模块等都可以称为对象,在本文中对象特指函数、变量、方法等(不指向模块)。

对上面的两个概念有了深入的认识,下面把原则列出。

  • import是导入的含义,在python中通过这个关键字可以导入模块,也可以导入模块中的对象(一般指函数、方法、类、变量等),但是需要注意的是import不能导入包。
  • from关键字可以修饰模块名称,也可以修改包的名称,修饰模块名称,则import导入的是对象名称;from关键字修饰包名称,后接的import修饰的是模块名称。

使用方法如下:

import module_name
from package_name import module_name
from module_name import object_name1 object_name2 ...
from package_name.module_name import object_name1 object_name2 ...

导入模块的示例:

import re
import sys

上面的语句就是导入re模块和sys模块。通过这种方式可以导入所有在搜索路径(sys.path)中的模块。关于如何自定义模块加入到搜索路径,本专栏下之前的文章也有所介绍,请移步阅读即可。

上面的用法很常用,也是我们经常使用的。下面介绍第二种,即加载一个模块下的一个或者多个对象,示例如下:

from module_name import object_name1 ojbecct_name2

上面的介绍中module_name特指模块名称,而object_name1、object_name2一般指模块中的变量、函数、方法、类等。即我们可以通过from+import的方式记载一个模块的中指定的函数、方法或者变量。这样做的好处是可以减少内存使用,只加载一个对象与加载模块中所有对象,对内存的消耗还是不一样的;劣势是如果调用模块仅使用被调用模块一个对象或者很少的几个对象,则此种方法可行,但是如果调用模块使用了很多的被调用模块的下对象,此种使用方法就不太友好,因为要针对每个对象添加一句上文中的语句。具体如何使用请根据实际情况进行分析。一个具体的例子

from re import search

search(xxxx,xxx)
#如果不使用此种方式,那么必须按照如下方式使用
import re

re.search(xxxx, xxx)

通过上面具体的例子,可以看出区别了吧。如果通过import导入了对象,那么在代码中使用该对象时可以直接使用对象名称,而无需使用模块前缀,即search;如果仅导入了模块,那么在使用时一定要加入前缀,即re.search

总结

无论是使用import还是from import,第一个要求是代码能够正常运行,其次,根据代码维护性,团队编码风格来确定选择哪一种方案。

如果我们只会使用到某个模块下面的一个函数(或者常量、类)并且名字不会产生混淆,可识别性高,那么from 模块名 import 函数名这没有什么问题。

如果我们会用到一个模块下面的多个函数,或者是我们将要使用的函数名、常量名、类名可能会让人产生混淆(例如 re.S、re.I),那么这种情况下,import 模块名然后再 模块名.xxx来调用会让代码更加清晰,更好维护。

但无论什么情况下,都禁止使用from xxx import *这种写法,它会给你带来无穷无尽的噩梦。

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
collections是Python内置库的一个模块,它提供了一些有用的类,用于处理Python的集合类型。这些类包括:Counter、defaultdict、deque、namedtuple等。 1. Counter类 Counter类是一个用于计数的容器,它可以统计元素出现的次数。可以使用它来创建一个字典,其字典的键是元素,值是元素的数量。Counter类的用法如下: ```python from collections import Counter # 创建一个Counter对象 c = Counter(['a', 'b', 'c', 'a', 'b', 'a']) # 统计元素出现的次数 print(c) # Counter({'a': 3, 'b': 2, 'c': 1}) # 统计前n个出现次数最多的元素 print(c.most_common(2)) # [('a', 3), ('b', 2)] ``` 2. defaultdict类 defaultdict类是一个字典类型,它可以自动为不存在的键分配一个默认值。当使用一个不存在的键时,它会自动创建一个默认值,并返回它。defaultdict类的用法如下: ```python from collections import defaultdict # 创建一个defaultdict对象 d = defaultdict(int) # 添加键值对 d['a'] = 1 d['b'] = 2 # 访问不存在的键 print(d['c']) # 0 ``` 3. deque类 deque类是一个双向队列,它可以在队列的两端进行插入和删除操作。deque类的用法如下: ```python from collections import deque # 创建一个deque对象 d = deque() # 在队列的左边插入元素 d.appendleft(1) d.appendleft(2) # 在队列的右边插入元素 d.append(3) d.append(4) # 访问队列的元素 print(d) # deque([2, 1, 3, 4]) # 从队列的左边删除元素 print(d.popleft()) # 2 # 从队列的右边删除元素 print(d.pop()) # 4 ``` 4. namedtuple类 namedtuple类是一个工厂函数,它可以用来创建一个具有字段名的元组。该类返回的是一个元组子类,它可以像普通元组一样访问元素,但也可以使用字段名来访问元素。namedtuple类的用法如下: ```python from collections import namedtuple # 定义一个namedtuple类型 Point = namedtuple('Point', ['x', 'y']) # 创建一个Point对象 p = Point(1, 2) # 访问元素 print(p.x) # 1 print(p.y) # 2 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值