python3xiaobaike_2020/chapter6/6-1 python3小白课:模块的导入.md
2025-04-20 23:22:14 +08:00

103 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# python3小白课模块的导入
python安装后就自带有许多内置的模块我们可以导入它们来增强我们的代码功能。
> [!tip]
>
> python安装非自带的需要你联网下载安装或离线安装的后续我们称之为三方库导入三方库的方法和导入内置模块的方法一致区别在于本机使用这些三方库前需要先安装而已。
模块的导入通常有以下两种语法:
* import 模块名1[ as 别名1], 模块名2[ as 别名2], ...
* from 模块名 import 成员名1[ as 别名1], 成员名2[ as 别名2], ...
上述语法中的方括号表示里面的内容可选填。
关于单词的含义大家可以看一下本节课结尾的单词释义。
* 第一种导入方式为导入整个模块,如果你导入多个模块,中间使用`,`隔开。有时候模块名你不喜欢或太长不好打不好记,你也可以用`as`给导入的模块指定别名,在后续的代码中可以通过别名来调用模块命令。后续代码中调用时,需要使用`模块名或别名.成员名`的方式调用。
* 第二种导入方式是从某个模块里导入成员,成员可以是函数,也可以是变量、类(关于类的知识,我们将在后面的课程中讲解)等其他东西。成员也可以一样的设置别名,支持导入多个成员。后续代码中调用时,可以直接使用`成员名`来进行调用。如果你需要导入模块中的所有成员,也可以写成`from 模块名 import *``*`代表所有,但我们一般不推荐这么做。
> [!warning]
>
> 使用`from 模块名 import *`语句进行模块导入,会让代码降低可读性,别人在读你的代码时,会不知道你一股脑的导入了什么。另外,当模块中比如有函数的名字跟你的代码中定义的函数名字相同时,也会受到影响。
---
> [!question]
>
> 为什么有两种导入方式呢?
我想是因为重名的原因,有些模块定义的函数等可能跟你自己在代码中定义的重名,使用第一种方式就不会起冲突。但也有时候模块命令使用第一种方式调用太长太繁琐,自己的代码中也没有什么冲突的,那么第二种方式是一种省事的选择。具体使用哪一种,可以根据自己的业务需要来决定。
我们来看点例子:
```python
# coding:utf-8
import sys
import os
print(sys.argv[0])
print(os.listdir("."))
```
这里我们导入了自带的`sys``os`两个模块(有的时候习惯叫法可能也会叫做包,如果后续我称之为包,也不要奇怪)。它们的作用,你可以自行使用`help`命令查看。
> [!danger]
>
> 记得模块需要先导入,才能看帮助文档。
导入后,可以使用`模块名.成员名`的形式调用如果是函数还能传入参数如果是可迭代对象比如是个列表、元组等可以传入索引等等。我们这里尝试了这俩模块里的俩命令。第一个是获取python程序运行时的命令行参数第一个元素为python脚本的名字。第二个是获取指定路径的文件和文件夹列表传入的参数表示脚本所在的当前文件夹。
可以看到,引用模块非常之简单。我们再来看下其他写法:
```python
# coding:utf-8
import sys as s
import os as o
print(s.argv[0])
print(o.listdir("."))
```
指定别名之后,可以使用别名。
我们来看一下另一种导入方式的例子:
```python
# coding:utf-8
from sys import argv as aaa
print(aaa[0])
```
可以看到,使用第二种导入方式可以直接导入成员,也能指定成员的别名,后续调用时,只需要使用成员名或者指定的别名即可调用,无需添加模块名。
> [!danger]
>
> 如果没有指定别名,需要注意成员名跟你自己写的代码中定义的成员不能重名。
>
> 如果指定了别名,需要注意指定的别名跟你自己写的代码中定义的成员不能重名,此时模块的原成员名可以重名没关系。
我们再来看个例子:
```python
# coding:utf-8
from sys import *
print(argv[0])
```
这里我们使用了`from 模块名 import *`的写法,导入了`sys`模块的所有成员,也可以直接调用里面的成员。但你需要很了解里面有什么命令,降低了可读性,而且也只能使用内部成员原本的名字,也可能导入了一些不必要的成员造成程序有重名的风险。所以一般情况下,我们不太推荐这么写。
### 单词释义
| 单词 | 释义 |
| ------- | ------------------------------------------------------------ |
| import | 导入 |
| as | 作为... |
| from | 从...哪里 |
| sys | system系统的简写 |
| os | operating system操作系统的简写 |
| argv | 查一下为argument vector参数向量指的应该是传入的参数列表 |
| listdir | list列举列表dirdirectory目录命令可以枚举给定路径的文件和文件夹 |