内容正文:
第6章 函数与模块
1
学习目标/Target
了解函数,能够说出函数的概念以及好处
掌握函数的定义与调用,能够正确地定义并调用函数
掌握函数参数的传递方式,能够通过多种方式给函数的参数传递数据
掌握函数的返回值,能够根据需要使用return语句返回函数处理结果
掌握变量作用域,能够说出全局变量和局部变量的特点
2
学习目标/Target
掌握递归函数的使用,能够运用递归函数解决阶乘的问题
掌握匿名函数的使用,能够运用匿名函数简化简单函数的定义
掌握模块的导入与使用,能够通过不同语句导入模块并使用模块的内容
掌握模块的变量,能够归纳变量__all__和__name__的作用
3
章节概述/ Summary
程序开发过程中,随着需要处理的问题变得越来越难,程序也会变得越来越长。冗长的程序牵扯的情况比较复杂,这不仅增加了阅读和理解的难度,也不利于后期对程序的维护与二次开发。函数和模块的出现便解决这些问题,它们为开发人员提供了丰富的工具和自由度,使得开发各种复杂的程序变得更加简单和高效。本章将详细介绍函数的相关知识,并简要介绍一些关于模块的知识。
4
目录/Contents
01
函数概述
函数的基础知识
函数的参数传递
02
03
函数的返回值
04
5
目录/Contents
05
变量作用域
实例:智能聊天机器人
函数的特殊形式
06
07
模块
08
6
模块
6.8
7
6.8.1 模块的导入和使用
1. 使用import语句导入模块
import语句支持一次导入一个模块,也支持一次导入多个模块。
使用import语句导入模块的语法格式如下。
import 模块1, 模块2, …
例如,导入Python中内置的模块random和time,代码如下:
import time # 导入一个模块
import random, time # 导入多个模块
6.8.1 模块的导入和使用
导入模块以后,可以通过“.”使用模块中的内容,包括全局变量、函数或类。
使用模块内容的语法格式如下。
模块名.变量名/函数名()/类名
例如,使用time模块中sleep()函数,示例如下:
time.sleep(1)
使用as关键字给模块起别名的语法格式如下。
import 模块名 as 别名
1. 使用import语句导入模块
6.8.1 模块的导入和使用
使用import语句导入模块后,每次使用模块时都需要添加“模型名.”前缀,非常繁琐。为了减少这样的麻烦,Python提供了另外一种导入模块的语句from-import-。使用from-import-方式导入模块之后,无需添加前缀,可以像使用当前程序中的内容一样使用模块中的内容。使用from-import-语句导入模块的语法格式如下。
from 模块名 import 变量名/函数名/类名
例如,导入time模块中的sleep()函数和time()函数,具体代码如下。
from time import sleep, time
2. 使用from-import-语句导入模块
6.8.1 模块的导入和使用
如果希望一次性导入模块中的全部内容,可以将from...import...语句中import后面的内容替换为通配符“*”。导入模块中全部内容的语法格式如下。
from 模块名 import *
例如,导入time模块中的全部内容,具体代码如下。
from time import *
2. 使用from-import-语句导入模块
6.8.1 模块的导入和使用
from-import-语句也支持为模块或模块中的内容起别名,其语法格式如下。
from 模块名 import 变量名/函数名/类名 as 别名
例如,给time模块中的sleep()函数起别名为sl,具体代码如下。
from time import sleep as sl
sl(1) # sl为sleep()函数的别名
2. 使用from-import-语句导入模块
6.8.2 模块的变量
1. __all__变量
Python模块的开头通常会定义一个__all__变量,该变量的值实际上是一个列表,列表中包含的元素决定了在使用from-import *语句导入模块后可以使用模块的哪些内容。
如果__all__中只包含模块中的部分内容,那么from-import *语句只会将__all__中包含的部分内容导入程序。
6.8.2 模块的变量
下面创建两个模块calc.py和test.py,分步骤演示如何通过__all__变量限制导入这两个模块的内容,具体步骤如下。
(1)创建模块calc.py,该模块中包含一个__all__变量和四个计算两个数的四则运算的函数,具体代码如下:
# 定义变量__all__,用于限制导入模块的内容
__all__ = ["add", "subtract"]
def add(a, b):
return a + b
def subtract(a, b):
return a - b
def multiply(a, b):
return a * b
def divide(a, b):
if (b):
return a / b
else:
print("error")
1. __all__变量
6.8.2 模块的变量
下面创建两个模块calc.py和test.py,分步骤演示如何通过__all__变量限制导入这两个模块的内容,具体步骤如下。
(2)创建模块test.py,在该模块中通过from ... import *语句导入calc.py模块,并调用该模块中的add()、subtract()、multiply()和divide()函数。
from calc import * # 导入calc.py模块
print(add(2, 3))
print(subtract(2, 3))
print(multipty(2, 3))
print(divide(2, 3))
1. __all__变量
6.8.2 模块的变量
下面创建两个模块calc.py和test.py,分步骤演示如何通过__all__变量限制导入这两个模块的内容,具体步骤如下。
(3)运行test.py文件,结果如下所示:
5
-1
Traceback (most recent call last):
File " D:\PythonProject\chapter06\test.py", line 4, in <module>
print(multipty(2, 3))
NameError: name 'multipty' is not defined
1. __all__变量
6.8.2 模块的变量
2. __name__变量
大型项目通常由多名开发人员共同开发,每名开发人员负责不同的模块。为了保证代码在整合项目后可以正常运行,开发人员通常会编写一些测试代码进行测试。然而,对整个项目而言测试代码是无用的。为了避免项目执行这些测试代码,Python为模块加入了__name__变量。
6.8.2 模块的变量
2. __name__变量
__name__变量通常与if条件语句一起使用,若模块是当前运行的模块,则__name__的值为__main__;若模块被其他模块导入,则__name__的值为模块名。
下面以定义的calc.py模块为例,演示__name__变量的用法。在calc.py模块中增加下列代码:
if __name__ == "__main__": # __name__的值为__main__
print(multiply(3, 4))
print(divide(3, 4))
本章小结
本章主要介绍了函数和模块,首先介绍了函数的概念以及基本知识,包括函数的定义和调用,其次介绍了函数参数传递和函数的返回值,然后介绍了变量作用域、匿名函数和递归函数,最后介绍了模块的相关内容,包括模块的导入与使用、模块的变量。希望通过本章的学习,读者能够理解程序中使用函数的优越性,可以按照需求灵活定义与调用函数,并能够在程序中熟练导入与使用模块。
本
章
小
结
19
$$