python中import和from...import的区别

本文对比了Python中两种常见的模块导入方式:import module与from module import foo。详细讨论了各自的优缺点,帮助开发者理解何时使用哪种导入方式更为合适。
部署运行你感兴趣的模型镜像

import modulefrom module import foo之间的区别。
1 import module
优点:更少维护的import的声明。使用模块中的另一项不需要添加任何额外的import。

缺点:在代码中打字module.foo是冗余的(通过使用import module as mo可以最小化冗余,然后只需要输入mo.foo而不是module.foo)。

注:module和foo都是占位符,表示任意的模块和函数。

2 from module import foo
优点:使用foo打字的数量更少。对模块的哪些项可以被访问进行更多的控制。

缺点:为了使用同一个模块中另外一个新的项,必须另外添加一条import声明语句。而且,失去了foo有关的语境。举个例子,相比于math.ceil(),ceil()要做什么事情是更不清晰的。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 基本使用方式 - **`import`**:用于导入整个模块,使用模块中的功能时,需通过`模块名.功能名`的形式调用。例如导入`math`模块并使用其`sqrt`函数: ```python import math result = math.sqrt(16) print(result) ``` - **`from...import`**:用于从模块中导入特定的功能(函数、类、变量等),导入后可直接使用这些功能,无需通过模块名引用。例如从`math`模块导入`sqrt`函数: ```python from math import sqrt result = sqrt(16) print(result) ``` ### 使用场景对比 - **需要使用模块的多个功能**:若要使用模块中的多个功能,使用`import`可将整个模块导入,后续通过`模块名.方法/类/变量`调用,代码可读性高,能明确功能来源。例如使用`random`模块的多个函数: ```python import random print(random.randint(1, 10)) print(random.random()) ``` 若仅需使用模块中的少数功能,使用`from...import`更简洁,可直接使用导入的功能,无需添加模块名前缀。例如只使用`math`模块的`pi``sin`函数: ```python from math import pi, sin print(pi) print(sin(pi / 2)) ``` - **避免命名冲突**:使用`import`导入模块时,模块中的名称不会直接引入当前命名空间,而是通过模块名访问,可避免与当前命名空间中的其他名称冲突。例如自定义变量名可能与模块中的某个函数名相同,使用`import`可避免混淆: ```python import math pi = 3.14 print(pi) print(math.pi) ``` 使用`from...import`会将指定的名称直接引入当前命名空间,可能导致命名冲突。若不同模块中有相同名称的功能,使用`from...import`会使代码难以区分功能来源。例如: ```python from module1 import func from module2 import func # 会产生命名冲突 ``` - **引入带层级的模块**:当导入的模块存在层级关系时,使用`import`可方便地导入整个层级结构。例如导入`a.b.c`模块: ```python import a.b.c ``` 使用`from...import`也可导入层级模块中的特定功能: ```python from a.b.c import some_function ``` ### 性能与内存方面 - **`import`**:导入整个模块时,会将模块的所有内容加载到内存中,但在使用时才会执行模块中的代码。若模块较大,可能会占用较多内存,但不同程序导入同一模块时,会共用内存中的模块副本,节省内存。 - **`from...import`**:从模块中导入特定功能时,只会将指定的功能加载到内存中,可减少内存占用。但每次导入时都会在内存中创建并加载功能的副本,不同程序导入时不会共用副本,程序对导入功能的修改不会影响原模块,不同程序之间也不会互相影响[^3]。 ### 其他注意项 简单的模块一般倾向于使用`import`,多数的`from`语句用于明确列举想要的变量,且限制在每个文件中只用一次`from *`形式。这样,任何无定义的变量名都可认为存在于`from *`所引用的模块内。当必须使用两个不同模块内定义的相同变量名变量时,必须使用`import`,这种情况下不能使用`from`[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

培之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值