Python import 和 from … import 的主要区别

Python 提供了两种常见的模块导入方式:import 和 from ... import。这两种方式在使用方式、命名空间管理、可读性和潜在问题方面都有显著区别。下面将详细说明这些方面。

1. 使用方式

import module

  • 导入整个模块。
  • 使用时需通过模块名访问模块中的对象。

import math

result = math.sqrt(16)
print(result)  # 输出 4.0

from module import name

  • 从模块中导入特定的对象(函数、类、变量等)。
  • 使用时直接引用导入的对象,不需模块名前缀。

from math import sqrt

result = sqrt(16)
print(result)  # 输出 4.0

2. 命名空间管理

import module

  • 将整个模块作为一个对象导入到当前命名空间中。
  • 模块中的对象通过 module.name 访问,不会与当前命名空间中的其他对象冲突。

from module import name

  • 直接将模块中的对象导入到当前命名空间中。
  • 可能会与当前命名空间中的其他对象发生命名冲突。

from math import sqrt
from cmath import sqrt  # 复数的 sqrt

result = sqrt(-1)  # 可能会混淆使用的 sqrt 函数
print(result)

3. 可读性和维护性

import module

  • 代码中明确知道哪些对象来自哪个模块,因为总是使用模块名前缀。
  • 提高代码可读性和可维护性。

实例

import os

current_directory = os.getcwd()
print(current_directory)  # 输出当前工作目录

from module import name

  • 代码中直接使用对象名,可能难以看出这些对象来自哪个模块。
  • 需要对代码进行更多注释或文档说明,以保持清晰。

from os import getcwd

current_directory = getcwd()
print(current_directory)  # 输出当前工作目录

4. 选择性导入和内存使用

import module

  • 导入整个模块,模块中的所有对象都可用。
  • 适用于需要使用模块中多个对象的情况。

from module import name

  • 仅导入模块中的特定对象,节省内存。
  • 适用于只需要使用模块中少量对象的情况。

# 只需使用 datetime 中的 date 对象
from datetime import date

today = date.today()
print(today)  # 输出当前日期

5. 导入所有对象

from module import *

  • 导入模块中的所有对象到当前命名空间。
  • 可能导致命名冲突,降低代码可读性,不推荐使用。

from math import *

print(sqrt(16))  # 直接使用 sqrt 函数

潜在问题:

from math import *
from cmath import *

result = sqrt(-1)  # 不明确使用哪个模块的 sqrt 函数
print(result)

总结

  • import module:适用于需要使用整个模块,避免命名冲突,提高代码可读性。
  • from module import name:适用于只需要模块中部分对象的情况,简化代码,但需注意命名冲突。
  • from module import *:尽量避免使用,可能导致命名冲突和代码混淆。

选择适合的导入方式取决于具体的使用场景和需求,通常推荐在需要避免命名冲突和保持代码清晰时使用 import 语句,在需要简化代码和使用特定对象时使用 from ... import 语句。 

  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python中的import和from import是用来导入其他模块的方式。使用import xxx时,表示导入整个模块xxx,可以通过xxx来访问该模块中的函数、类和变量等。\[1\]而使用from xxx import mmm时,表示只导入模块xxx中的特定函数、类或变量mmm,可以直接使用mmm而不需要使用xxx作为前缀。\[2\]另外,使用from xxx.mmm import yyy时,表示从模块xxx的子模块mmm中导入特定函数或类yyy。\[2\]最后,使用from mmm import *时,表示导入模块mmm中的所有函数、类和变量,但不推荐使用这种方式,因为可能会导致命名冲突。\[2\]总结来说,无论是使用import还是from import,都是用来导入模块或模块中的特定函数、类和变量。\[3\] #### 引用[.reference_title] - *1* *3* [Python 中的 import 与 from import 区别](https://blog.csdn.net/skydust1979/article/details/106955139)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Pythonimport和from import区别](https://blog.csdn.net/jk_101/article/details/112279923)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

诗者才子酒中仙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值