【官方 | 计算机二级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新增部分内容

编辑不易,点赞收藏关注!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

调参侠鱼尾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值