在编写程序的过程中把所有代码都写到一个脚本中肯定不便于维护和使用。
python有一种方法可以把定义放在一个脚本里,并在其他脚本或解释器的交互式实例中使用他们。
这样的脚本被称为模块。
模块中的定义可以导入到其他模块中。
案例:
在当前目录下创建一个名为`fibo.py`的文件,文件内容如下:
```python
# fibo.py
# 斐波那契数列 模块
def fib(n): # 打印斐波那契数列到数n
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a+b
print()
def fib2(n): # return Fibonacci series up to n
result = []
a, b = 0, 1
while a < n:
result.append(a)
a, b = b, a+b
return result
```
## 导入模块
通过关键字`import`可以在代码中导入写好的模块,语法如下:
```python
import 模块名
```
现在,再在当前目录下创建一个名为`main.py`的文件。然后编写如下代码:
```python
# main.py
import fibo
fibo.fib(10)
```
运行后输出:
```python
0 1 1 2 3 5 8
```
语句`import fibo`会在当前脚本中导入变量`fibo`,它表示模块`fibo`,然后通过`fibo.fib`就可以访问模块`fibo`中定义好的函数,然后执行。
`import`语句有一个变体,它可以把模块中的名称(函数,变量,类名)直接导入到当前模块的变量表里,语法如下:
```python
from 模块名 import 名称
```
修改`main.py`文件里的代码如下:
```python
# main.py
from fibo import fib, fib2
fib2(10)
```
运行后输出:
```python
[0, 1, 1, 2, 3, 5, 8]
```
语句`from fibo import fib, fib2`,直接将模块`fibo`中的函数`fib`,`fib2`导入到当前模块中,所以在后面的代码中就可以直接通过`fib`,`fib2`访问模块`fibo`中对应的函数。
还有一个变体可以导入定义的所有名称,语法如下:
```python
from 模块名 import *
```
这会导入模块中所有非以下划线开头的名称。通常不建议使用这个功能,因为它在解释器中引入了一组未知的名称,有可能会覆盖你之前定义过的东西,也会导致代码的可读性差。不过在交互式运行时,为了节省打字可以这么用。
有时,需要导入的定义名称可能和当前模块中的定义重名,可以通过下面的变体自定义导入名称:
```python
import 模块名称 as 新名称
from 模块名称 import 名称 as 新名称
```
例如:
```python
>>> import fibo as fib
>>> fib.fib(10)
0 1 1 2 3 5 8
>>> from fibo import fib as fibonacci
>>> fibonacci(10)
0 1 1 2 3 5 8
```
- 第1章 编程基础
- 零基础能学Python吗?
- 编程语言是什么
- 编译型与解释型编程语言的区别
- python是什么?
- 学python能干什么?
- 第2章 python开发环境搭建
- windows下安装python
- cmd命令行工具
- 环境变量如何设置?
- 如何运行python程序?
- 学习神器Jupyter lab
- 第3章 基本数据类型
- 基本数据类型概述
- 变量的定义和使用
- 整数类型
- 浮点数类型
- 算术运算符
- 赋值运算符
- 字符串类型
- 字符串常用方法
- 字符串格式化
- 列表类型
- 元组类型
- 可变与不可变类型
- 深浅拷贝
- 集合类型
- 字典类型
- 布尔型
- NoneType
- 第4章 程序流程控制
- 程序结构
- if分支语句
- while条件循环
- for循环
- 循环控制关键字
- 异常处理
- 第5章函数与代码复用
- 函数的定义和调用
- 函数的参数
- 函数的返回值
- lambda函数
- 变量作用域
- python内建函数
- 第6章 面向对象
- 类和对象
- 属性
- 方法
- 继承
- super()函数
- 多态
- 私有化
- 自省与反射机制
- 第7章 模块和包
- 模块
- 包
- 第三方库
- 第8章 文件IO操作
- 文件概述
- 字符编码
- 字节类型
- python读取文件
- python写文件
- 文件指针