Python3 import 与 from...import

本文介绍了Python中如何使用import语句导入模块,包括导入整个模块、指定成员及所有成员的方法,并探讨了不同导入方式对程序可读性和命名空间的影响。

在 python 中,用 import 或者 from…import 来导入相应的模块。模块其实就是一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使用这些功能的时候,直接把相应的模块导入到我们的程序中。

导入 sys 模块

import sys
print ('命令行参数为:',sys.argv[0])

在上的代码中,导入Python的整个sys模块,下面我们想打印第一个命令行参数,也就是文件的位置,在sys模块中它们分别是argv[0]。所以我们需要用sys.argv[0]调用它。

导入 sys 模块中argv成员

from sys import argv
print ('命令行参数为:',argv[0])

在上的代码中,导入Python的sys模块中argv成员,再打印第一个命令行参数时,只需要直接使用argv[0]。

导入 sys 模块中所有成员

from sys import *
print ('命令行参数为:',argv[0])

在上的代码中,导入Python的sys模块中所有成员,只需要直接使用argv[0]。

总的来说,Python中的import就像C/C++中的#include类似,将一些已经写好的基础库或者第三方库进入到当前的代码中,只是在Python中更倾向叫它们模块。一般说来,应该避免使from…import而使用import语句,因为这样可以使你的程序更加易读,也可以避免名称的冲突。

### 基本使用方式 - **`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]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值