整理的文章内容主要来源为高教版《计算机等级考试二级 Python》教程视频讲义,并且更正了原讲义中的错误的地方。
专栏文章索引如下:
考试大纲
第 1 章 程序设计基本方法
第 2 章 Python 语言基本语法元素
第 3 章 基本数据类型
第 4 章 程序的控制结构
第 5 章 函数和代码复用
第 6 章 组合数据类型
第 7 章 文件和数据格式化
第 8 章 Python 计算生态
第 9 章 Python 标准库概览
第 10 章 Python 第三方库使用
第 11 章 Python 第三方库纵览

第 5 章 函数和代码复用

  • 1. 函数的基本使用
    • 1.1 函数的定义
    • 1.2 函数的使用
  • 2. 函数的参数传递
    • 2.1 可选函数传递
    • 2.2 参数名称传递
    • 2.3 函数的返回值
  • 3. 变量的作用域
    • 3.1 局部变量
    • 3.2 全局变量
  • 4. 代码复用
  • 5. 选择题

1. 函数的基本使用

函数是一段具有特定功能的、可重用的语句组,通过函数名来表示和调用。经过定义,一组语句等于一个函数,在需要使用这组语句的地方,直接调用函数名称即可。因此,函数包括两部分:函数的定义和函数的使用。
使用函数主要有两个目的:降低编程难度增加代码复用。函数是一种功能抽象,利用它可以将一个复杂的大问题分解成一系列简单的小问题,分而治之,为每个小问题编写程序,通过函数封装,当各个小问题都解决了,大问题也就迎刃而解。函数可以在一个程序中多个位置使用,也可以用于多个程序,当需要修改代码时,只需要在函数中修改一次,所有调用位置的功能都更新了,这种代码复用降低了行数和代码维护难度。

1.1 函数的定义

Python 语言通过了 def 关键字定义函数。
语法格式:

def 函数名(参数列表):函数体return 返回值列表

函数名可以是任何有效的 Python 标识符,参数列表是调用该函数时传递给它的值,可以有零个、一个或多个,当传递多个参数时各参数由逗号分隔,当没有参数时也要保留圆括号。参数列表中参数是形式参数,简称为“形参”,相当于实际参数的一种符号表示或符号点位符。函数体是函数每次被调用时执行的代码,由一行或多行语句组成。如果需要返回值,使用保留字 return 和返回值列表。函数可以没有 return 语句,函数体结束后会将控制权返回给调用者。

def calSum(n):s = 0for i in range(1,n):s += i;return s

**注意:**当函数没有 return 时,仅表示执行一段代码功能。

1.2 函数的使用

函数的定义也叫函数“声明“,定义后的函数不能直接运行,需要经过”调用“才能得到运行。
语法格式:

函数名(实际赋值参数列表)
def calSum(n):s = 0for i in range(1,n):s += i;return s
print(calSum(5))

每次使用函数可以提供不同参数作为输入,以实现对不同数据的处理:函数执行后,可以反馈相应的处理结果。函数的执行与黑盒类似,使用者不需要了解函数内部实现原理,只要了解函数的输入输出方式即可。
具体来说,函数的使用一共分为4个步骤:

  • 函数定义:使用 def 保留字将一段代码定义为函数,需要确定函数名、参数名、参数的个数,使用函数名称作为形式参数(占位符)编写函数内部的功能代码。
  • 函数调用:通过函数名调用函数功能,对函数的各个参数赋予实际值,实际值可以是实际数据,也可以是在调用函数前已经定义过的变量。
  • 函数执行:函数被调用后,使用实际参数(赋予形式参数的实际值)参与函数内部代码的运行,如果有结果则进行输出。
  • 函数返回:函数执行结束后,根据 return 保留字段的指示决定是否返回结果,如果返回结果,则结果将被放置到函数被调用的位置,函数使用完毕,程序继续运行。

编程中大量使用函数已经成为了一种编程范式,叫做函数式编程。函数式编程的主要思想是把程序过程尽量写成一系列函数调用,这能够使代码编写更简洁、更易于理解,是中小规模软件项目中最常用的编程方式。
在 Python 中,函数也是有类型的,可以通过 type() 获得函数的类型。函数采用其定义的名字表达,具体为 function 类型,这是一种 Python 的内置类型。然而,如果调用函数,则类型为返回值的类型。

def f(x):return x+1
print(type(f))
print(type(f(1)))

Python 语言中最小函数可以不表达任何功能,比如说:

def f():pass

其中,保留字 pass 表示不进行任何操作,起到占位符的作用,因为函数体内部总要编写一行代码,对f()的调用不实现任何功能。

2. 函数的参数传递

2.1 可选函数传递

函数的参数在定义时可以指定默认值,当函数被调用时,如果没人传入对应的参数时,则使用函数定义时的默认值替代。
语法格式:

def 函数名(非可选参数列表,可选参数列表=默认值):函数体return 返回值列表
def multiply(x,y=10):print(x*y)
multiply(10)

需要注意,可选参数一般都放在非可选参数的后面,即定义函数时,先给出所有非可选参数,然后再分别列出每个可选参数及对应的默认值。

2.2 参数名称传递

函数调用时,默认采用按照位置顺序的方式传递给函数,例如multiply(10,2) 中第一个实参,默认赋值给形参 x,第二个实参赋值给形参 y.
Python 语言同时支持函数按照参数名称方式传递参数。
语法格式:

函数名(参数名=实际值)
def multiply(x,y=10):print(x*y)
multiply(10,2)

采用参数名传递方式不需要保持参数传递的顺序,参数之间的顺序可以任意调整,只需要对每个必要参数赋予实际值即可,这种方式会显著增强程序的可读性。

2.3 函数的返回值

return 语句用来结束函数并将程序返回到函数调用的位置继续执行。return 语句可以出现在函数中的任何部分,同时可以将 0 个、1 个或多个函数运算的结果返回给函数被调用处的变量。

def multiply(x,y=10):return x*y
s = multiply(10,2)
print(s)

**注意:**多个返回值问题:当 return 返回多个值时,这些值形成了一个元组数据类型,由小括号和逗号分隔,例如 (a,b,c)。元组是 Python 内置的一种组合数据类型。
函数可以没有 return, 此时函数并不返回值。

def printwords():print('这是一个没有reuturn的函数')

当函数使用 return 返回多个值时,可以使用一个变量或多个变量保存结果。

def multiply(x,y):return x*y, x+y
a,b = multiply(10,2)

当函数存在多种结束条件时,将使用多个 return 语句。

def manyret(x):try:if x > 0:return x+1else:return x-1except:return 0

在 manyret() 函数中,由于在 try-except 异常判断及 if-else 分支语句,该函数有 3 个出口,即 3 个返回 return 语句,这种情况在函数运用中十分常见。

3. 变量的作用域

根据程序中变量所在的位置和作用范围,变量可分为局部变量和全局变量。局部变量仅在函数内部,且作用域也在函数内部。全部变量的作用域跨过多个函数。

3.1 局部变量

局部变量指在函数内部定义的变量,仅在函数内部有效,当函数退出时变量将不再存在。

变量 z 是函数 addSum() 内部使用的变量,当函数调用后,变量 z 将不存在。

3.2 全局变量

全部变量是指在函数之外定义的变量,在程序执行全过程有效。全局变量在函数内部使用时,需要提前使用保留字 global 声明。
语法格式:

global 全局变量


注意事项:全局变量声明
使用 global 对全局变量声明时,该变量要与外部全局变量同名。
上例中,变量 n 是全局变量,在函数 addSum() 中使用时需要在函数内部使用 global 声明,声明后即可使用。如果未使用保留字 global 声明,即使名称相同,也不是全局变量。

使用 global 保留字声明变量的作用域是 Python 语言中少有需要再次声明的情形,由于作用域不同,这种声明不能省略。

4. 代码复用

函数是程序的一种基本抽象方式,它将一系列代码组织起来通过命名供其他程序使用。函数封装的直接好处是代码复用,任何其他代码只要输入参数即可调用函数,从而避免相同功能的代码在被调用处重复编写。代码复用有另一个好处,当更新函数功能时,所有被调用处的功能都被更新。
程序由一系列代码组成,如果代码是顺序但无组织的,不仅不利于阅读和理解,也很难进行升级和维护。当程序长度在百行以上,如果不划分模块,程序的可读性就已经很糟糕了。解决这一问题最好的方法是将一个程序分割成短小的程序段,每一段程序完成一个小的功能。使用函数对合理划分为功能模块,并基于模块设计程序是一种常用方法,被称为“模块化设计”。

模块化设计是指函数的封装功能将程序划分为主程序、子程序和子程序间关系的表达。模块化设计是使用函数设计的思考方法,以功能块为基本单位,一般有两个基本要求:

  • 紧耦合:尽可能合理划分为功能块,功能块内部耦合紧密。
  • 松耦合:模块间关系尽可能简单,功能块之间耦合度低。

耦合性指程序结构中各模块之间相互关联的特性,它取决于各模块间接口的复杂程序和调用方式。耦合性是影响软件复杂程序和设计质量的一个重要因素。紧耦合指模块或系统间关系紧密,存在较多或复杂的相互调用。紧耦合的缺点在于更新一个模块可能导致其他模块变化,复用较困难。松耦合一般基于消息或协议实现,系统间交互简单。
使用函数只是模块设计的必要非充分条件,根据计算需求合理划分函数十分重要。一般来说,完成特定功能或被经常复用的一组语句应该采用函数来封装,并尽可能减少函数间参数和返回值的数量。

5. 选择题

(1)用来定义函数的保留字是(B)

  • A. global
  • B. def
  • C. return
  • D. yield

(2)以下关于 Python 函数的说法中正确的是(B)

  • A. 可以用保留字作为函数的名字
  • B. 函数内部可以通过关键字 global 来声明全局变量
  • C. 调用带有默认值参数的函数时,不能作为默认值参数传递任何值,必须使用默认值
  • D. 函数中没有 return 语句或者 return 语句不带任何值,那么该函数的返回值 True

(3)程序最外层有一个变量 a, 定义一个函数,其中再次使用了变量,以下说法正确的是(B)

  • A. 函数中将 a 声明为 global, 对 a 的操作与全局变量无关
  • B. 函数中未将 a 声明为 global, 对 a 的操作与全局变量无关
  • C. 函数中未将 a 声明为 global, 对 a 的操作即为对全局变量 a 的操作
  • D. 函数中将 a 声明为 global, 对 a 的操作即为对全局变量 a 的操作,但函数返回时,全局变量 a 被销毁

(4)给出以下代码,运行结果是(D)

def fun(a=1):return a+1
func(func(func()))
  • A. 1
  • B. 2
  • C. 3
  • D. 4

(5)给出以下代码,运行结果是(C)

def func():print(‘Hello’)
type(func(), type(func()))
  • A. <class ‘function’>, <class ‘function’>
  • B. <class ‘function’>, <class ‘str’>
  • C. <class ‘function’>, <class ‘NoneType’>
  • D. <class ‘str’>, <class ‘function’>

(6)以下说法错误的是(B)

  • A. 函数定义不一定放在调用之前
  • B. 当代码中有 main 函数时,程序将从 main 开始执行
  • C. 可以在函数中定义函数
  • D. 语句 a=func() 中,func 函数可以没有返回值

(7)给出以下代码,程序的运行结果是(A)

s=’an apple a day’
def split(s):return s.split(‘a’)
print(split(s))
  • A. [‘’,’n’,’pple’,’d’,’y’]
  • B. [‘an’,’apple’,’a’,’day’]
  • C. 在函数定义时报错
  • D. 在最后一行报错

(8)定义函数如下,程序的运行结果是(C)

f = lambda x:x+1
f(f(1))
  • A. 1
  • B. 2
  • C. 3
  • D. 4

(9)以下说法正确的是(C)

  • A. 函数内部的语句不会改变任何非全局变量的值
  • B. 任何传入函数的参数都会以副本的形式存在于函数中
  • C. 在函数内定义的子函数只能在函数内调用
  • D. 每个函数必须有至少一个 return 语句

(10)以下函数的运行结果是(D)

def func(ls=[]):ls.append(1)return ls
a = func()
b = func()
print(a,b)
  • A. [1][1]
  • B. [1], [1,1]
  • C. [1,1], [1]
  • D. [1,1], [1,1]

PDF 讲义下载链接如下:
链接:https://pan.baidu.com/s/1rc8d2_mmtci0o5vtCSl6rg
提取码:8080

第 5 章 函数和代码复用相关推荐

  1. 第五章 函数和代码复用

    第五章 函数和代码复用 5.1 函数的基本使用 5.1.1 函数的定义 定义:函数是一段具有特定功能的.可重用的语句组,用函数名来表示并通过函数名进行功能调用. 使用函数的目的:降低编程难度和代码重用 ...

  2. python中组合数据类型、函数和代码复用的难点_Python电子教案5-2 函数和代码复用...

    <Python电子教案5-2 函数和代码复用>由会员分享,可在线阅读,更多相关<Python电子教案5-2 函数和代码复用(56页珍藏版)>请在人人文库网上搜索. 1.七段数码 ...

  3. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用

    本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...

  4. 测验5: 函数和代码复用 (第5周)

    测验5: 函数和代码复用 (第5周) 文章目录 测验5: 函数和代码复用 (第5周) 单选题 程序题 这是python123官网上联合MOOC的Python程序设计(第10期)答案 单选题 第三题补充 ...

  5. Python基础(三)_函数和代码复用

    三:函数和代码复用 (一)函数的基本使用 1.函数的定义 函数是一段具有特定功能的.可重用的语句组,用函数名来表示并通过函数名进行功能调用.函数也可以看作是一段具有名字的子程序,可以在需要的地方调用执 ...

  6. 函数和代码复用之实例解析:软文的诗词风

    @TOC函数和代码复用之实例解析:软文的诗词风 人生苦短,我学Python 朋友圈已经是现代人生活中的一种社交形态,朋友圈里面的各种软文也体现了语言风格的变化.为了便于手机阅读,很多软文常常会使用一种 ...

  7. python之函数和代码复用笔记

    这一章的内容有点多,我也尝试一下这个目录是怎么用的,,哈哈 本章节内容如下 一,前言 二,函数的定义与使用 1,函数的理解与定义 2,函数的使用及调用过程 (1)函数的使用 (2)函数的调用过程 3, ...

  8. Python_note5 函数和代码复用+PyInstaller库+数码管绘制

    函数的定义与使用 函数定义时,参数是输入.函数是处理.结果是输出IPO 实参代替形参-调用:可以有参数,也可以没有参数,必须有括号 有默认值的可选参数在非可选参数之后def fun(<非可选参& ...

  9. python函数代码的复用_Python__函数和代码复用

    主要内容 函数的定义和使用 实例:七段数码管的绘制 代码复用与函数递归 PyInstall库的使用 实例:科赫雪花小包裹 函数的定义与使用 函数的理解与定义 函数的使用及调用过程 函数的参数传递 函数 ...

最新文章

  1. 为什么有人不喜欢标准成本?
  2. big sur删除snapshot_法国Labarthe-Sur-Lèze公立中学 | LCR Architectes
  3. 全国计算机等级考试题库二级C操作题100套(第01套)
  4. Ext JS 5的声明式事件监听
  5. router 53 亚马逊_亚马逊53号公路
  6. Html - Json转excel文件
  7. 《Predicting Loose-Fitting Garment Deformations Using Bone-Driven Motion Networks》Reading Notes
  8. 第50篇-企查查请求头参数分析【2022-09-29】
  9. 多多视频带货快速出单小技巧!
  10. mysql错误1146解决方法
  11. SC7A20获取三轴加速度值
  12. 中集飞瞳多式联运智能化方案海铁运输数字化集装箱管理,多式联运智能化铁路智能多式联运,中集集团高科技中集飞瞳多式联运智能化领军者
  13. 宝塔解析域名至8000端口(多url)
  14. 洛谷2591BZOJ2298 problem a题解
  15. Linux 挂载Samba 设置777权限及取消挂载
  16. Redis缓存一致性问题解决方案
  17. 【电路设计】基于变压器的DC/DC变换电路(含Multisim仿真)
  18. 实现中英文对接翻译小程序—最终版
  19. 《把时间当作朋友》---- 读书笔记
  20. mysql columns表_mysql8 参考手册-INFORMATION_SCHEMA COLUMNS表

热门文章

  1. 入门级短信推送,你还不会吗?
  2. C#中操作Word(9)—— 向Word中插入图表的三种方法(二)
  3. mysql CPU占用过高解决方案
  4. 图像保边滤波算法集锦--非局部均值NLM滤波器
  5. 简易数字电压表设计 单片机 仿真 ADC0809
  6. 寻找真实IP-子域名查找
  7. 一级计算机浏览器题加收藏夹,2016年计算机一级考试上机操作重难点突破
  8. 中国计算机科学院士,盘点!获奖者中,84位院士、10位国家最高科学技术奖得主,高校科学家表现出色...
  9. 交易的核心精髓是什么?
  10. 一起学Python吧~re正则+MySQL