【官方 | 计算机二级Python教程】第五章:函数和代码复用
参考书目
拜读的是计算机等级考试官方推荐教程 《全国计算机等级考试二级教程Python语言程序设计(2022年版)》,该书目可用于应试备考中知识点梳理,同时也很适合初学者使用。本文将记录本人在阅读学习过程中的总结与思考。
其余科目大纲教材可访问:全国计算机等级考试官网
第五章:函数和代码复用
本章知识导图
5.1 函数的基本使用
- 概述:函数是一段具有特定功能的、可重用的语句组,通过函数名来表示和调用
- 目的:降低编程难度(通过解决小问题而解决大问题)和增加代码复用(降低代码行数和维护难度)
- 4步骤:函数定义、函数调用、函数执行、函数返回
5.1.1 函数的定义/声明
Python语言通过保留字def
定义函数,语法形式如下:
def <函数名>(<参数列表>):
<函数体>
return <返回值列表>
- 函数名:可以是任何有效的Python标识符
- 参数列表:是调用该函数时传递给他的值,可以有0个,1个或是多个,当传递多个参数时各参数由逗号分隔,当没有参数时也要保留圆括号。参数列表中的参数是形式参数,简称为“形参”,相当于实际参数的一种符号表示或符号占位符。无参函数就是参数列表为空的函数,如果函数在调用时不需要向函数内部传递参数,就可以使用无参函数。
- 函数体:使用参数名称作为形参编写函数内部的功能代码。函数体是函数每次被调用时执行的代码,由一行或多行语句组成。
- 返回值列表:函数是否需要返回值由实际情况而定,当函数没有return的时候仅表示执行一段代码功能
5.1.2 函数的调用
定义后的函数需要经过“调用”才能得到运行。调用的基本方式如下:
<函数名>(<实际赋值参数列表>)
通过函数名调用函数功能,对函数的各个参数赋予实际值,实际值可以是实际数据,也可以是在调用函数前已定义过的变量
# 定义一个对整数n求阶乘的函数
def fact(n):
s = 1
for i in range(1, n+1):
s *= i
return s
运行效果如下:
>>> print(fact(10)) # 输出10!
>>> print(fact(5)) # 输出5!
3628800
120
5.1.3 函数的执行
函数被调用后,使用实际参数(赋予形式参数的实际值)参与函数内部代码的运行,如果有结果则进行输出。
5.1.4 函数的返回
函数执行结束后,根据return
保留字的指示决定是否返回结果,若返回结果,则结果将被放置到函数被调用的位置,函数使用完毕,程序继续运行。
函数可以有返回值,也可以没有返回值,如
def hi():
print('Hello Python')
# return 'Hello Python'
这个代码示例既表示了一个无参函数,也表示了一个无返回值函数,在人为未定义返回值的情况下,默认返回值为None。运行上述代码,输出为:
>>> print(hi())
Hello Python
None
5.1.5 Python最小函数
Python最小函数可以不表达任何功能,如下:
def f():
pass
其中,保留字pass
表示不进行任何操作,起到占位的作用,因为函数体内部总要编写一行代码,pass用来表示这种占位。对f()的调用不实现任何功能。
5.1.6 函数的类型
利用type()
获取函数的类型。函数采用其定义的名字表达,具体为function类型,这是一种Python的内置类型。然而,若调用函数,则类型为返回值的类型。
>>> def f(x):
return x+1
>>> print(type(f))
>>> print(type(f(1)))
<class 'function'>
<class 'int'>
5.2 函数的参数传递
5.2.1 可选参数传递
函数的参数在定义时可以指定默认值,当函数被调用时,如果没有传入对应的参数值,则使用函数定义时的默认值替代。带有可选参数的函数定义语法形式如下:
def <函数名>(<非可选参数列表>, <可选参数> = <默认值>)
<函数体>
return <返回值列表>
以两个数的乘法计算函数为例,设y
为可选参数:
>>> def multiply(x,y=10):
print(x*y)
>>> multiply(90)
990
>>> multiply(90,2)
198
注意:可选参数一般放置在非可选参数后面,即定义函数时,先给出所有非可选参数,然后再分别列出每个可选参数及对应的默认值。
5.2.2 参数名称传递
Python支持函数按照参数名称方式传递参数:
>>> def multiply2(x,y=10):
print(x*y)
>>> multiply2(x=99)
990
>>> multiply2(y=2,x=10)
20
注意:采用参数名称传递方式不需要保持参数传递的顺序,参数之间的顺序可以任意调整,只需要对每个必要参数赋予实际值即可
5.2.3 函数的返回值
- 无返回值/单返回值:请参考5.1.4
- 多返回值:当返回多个值的时候,这些值形成了一个元组数据类型,由小括号和逗号分隔。
>>> def multiply3(x,y=10):
return x*y, x+y
>>> s=multiply3(99,2)
>>> print(s)
(198, 101)
当函数使用return返回多个值的时候,可以用一个变量或多个变量保存结果:
>>> a,b = multiply3(10,5)
>>> print(a)
50
>>> print(b)
15
- 多return语句:当函数存在多种结束条件的时候使用
def m(x):
try:
if x>0:
return x+1
else:
return x-1
except:
return 0
5.3 变量的作用域
根据程序中变量所在的位置和作用范围,变量分为局部变量和全局变量
5.3.1 局部变量
局部变量指在函数内部定义并使用的变量,仅在函数内部使用,且作用域也在函数内部(仅在函数内部有效),当函数退出时变量将不再存在
>>> def multiply(x,y=10):
z = x*y # z为函数内部局部变量
return z
>>> s = multiply(99,2)
>>> print(s)
198
>>> print(z)
Traceback (most recent call last):
File "D:\downloads\桌面\计算机二级Python\函数\变量.py", line 7, in <module>
print(z)
NameError: name 'z' is not defined
5.3.2 全局变量
全局变量指的是在函数之外定义的变量,在程序执行全过程有效。全局变量在函数内部使用时,需要提前使用保留字global
声明,语法如下:
global <全局变量>
>>> n = 2 # n是全局变量
>>> def multiply2(x, y=10):
global n # 全局变量声明
return x*y*n # 使用全局变量n
>>> s = multiply2(99, 2)
>>> print(s)
396
若未使用保留字global
声明,即使名称相同,也不是全局变量:
>>> n = 2 # n是全局变量
>>> def multiply3(x, y=10):
n = x*y
return n # 此处n不是全局变量
>>> s = multiply3(99, 2)
>>> print(s)
198
>>> print(n) # 不改变外部全局变量的值
2
5.4 代码复用
函数封装的直接好处是代码复用,避免相同功能代码在被调用处重复编写
5.4.1 耦合性
耦合性指程序结构中各模块之间相互关联的程度,它取决于各模块间接口的复杂程度和调用方式。耦合性是影响软件复杂程度和设计质量的一个重要因素。
5.4.2 模块化设计
利用函数将程序合理划分为多个功能模块,并基于模块设计程序是一种常用的程序设计方法,被称为“模块化设计”
模块化设计指通过函数的封装功能将程序划分为主程序、子程序和子程序间关系的表达。一般有如下两个要求:
- 紧耦合:尽可能合理划分功能块,功能块内部耦合紧密;
- 松耦合:模块间关系尽可能简单,功能之间耦合度低。
5.5 函数递归
5.6 过程式与函数式编程
- 过程式编程:一种以计算过程或运算流程为中心的编程方法,也是一种十分自然、符合人类思维方式的编程方法。简单来说,就是按照操作流程或步骤进行问题分解,并编写代码逐步实现流程或步骤所要求的计算功能
- 函数式编程:是过程式编程的一种演进,亦称模块式编程。其主要思想是把程序过程尽量写成一系列函数调用,这能够使代码编写更简洁、更易于理解,是中小规模软件项目中最常用的编程方式
习题
个人整理了一些Python习题与相应的解析,可见专栏:Python编程习题
本文代码编译环境及版本
None
更新日志
时间 | 内容 |
---|---|
2023.2.9 | 首次发表 |
2023.2.11 | 新增部分内容 |
编辑不易,点赞收藏关注!