当前位置: 首页 > backend >正文

【知识点】第5章:函数和代码复用

文章目录

  • 知识点整理
    • 函数的基本使用
    • 函数的定义
    • 函数的调用
    • 函数的参数传递
      • 参数类型:1. 带有默认值的参数
      • 参数类型:2. 可变数量的参数
      • 参数的传递:位置/名称传递
    • 函数的返回值
    • 函数对变量的作用
    • 代码复用和模块化设计
    • 递归
  • 练习题
    • 判断题
    • 简答题
    • 填空题
    • 选择题

知识点整理

函数的基本使用

函数是一段具有特定功能的、可重用的语句组。

函数是一段具有特定功能的、可重用的语句组,用函数名来表示并通过函数名进行功能调用。函数也可以看作是一段具有名字的子程序,可以在需要的地方调用执行,不需要在每个执行的地方重复编写这些语句。每次使用函数可以提供不同的参数作为输入,以实现对不同数据的处理;函数执行后,还可以反馈相应的处理结果。

函数能够完成特定功能,与黑盒类似,对函数的使用不需要了解函数内部实现原理,只要了解函数的输入输出方式即可。严格地说,函数是一种功能抽象。有些函数是用户自己编写的,称为自定义函数;Python安装包也自带了一些函数和方法,包括Python内置的函数(如abs()eval())、Python标准库中的函数(如math库中的sqrt())等。

使用函数主要有两个目的:降低编程难度代码重用

函数的定义

Python使用 def 保留字定义一个函数,语法形式如下:
在这里插入图片描述

在这里插入图片描述

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

函数的调用

函数调用的一般形式如下:
在这里插入图片描述

参数列表中给出要传入函数内部的参数,这类参数称为实际参数,简称为 “实参”

程序调用一个函数需要执行以下4个步骤。

  1. 调用程序在调用处暂停执行;
  2. 在调用时将实参复制给函数的形参;
  3. 执行函数体语句;
  4. 函数调用结束给出返回值,程序回到调用前的暂停处继续执行。

函数的参数传递

函数可以定义可选参数、使用参数的位置或名称传递参数值,根据函数中变量的不同作用域有不同的函数返回值方式。

参数类型:1. 带有默认值的参数

在定义函数时,如果有些参数存在默认值,即部分参数不一定需要调用程序输入,可以在定义函数时直接为这些参数指定默认值。当函数被调用时,如果没有传入对应的参数值,则使用函数定义时的默认值替代。

在这里插入图片描述

参数类型:2. 可变数量的参数

在函数定义时,也可以设计可变数量参数,通过在参数前增加星号(*)实现。带有星号的可变参数只能出现在参数列表的最后。调用时,这些参数被当作元组类型传递到函数中。

vfunc()函数定义了可变参数b,调用vfunc()函数时输入的(2,3,4,5)被当作元组传递给b,与a累加后输出。

在这里插入图片描述

参数的传递:位置/名称传递

函数调用时,实参默认采用按照位置顺序的方式传递给函数,例如dup("knock~",4)中第一个实参默认赋值给形参string,第二个实参赋值给形参times。当参数较多时,这种调用参数的方式可读性较差。

举例:

在这里插入图片描述
对于函数 func,它的一个实际调用如下:

在这里插入图片描述

存在问题:如果仅看实际调用而不看函数定义,很难理解这些输入参数的含义。在规模稍大的程序中,函数定义可能在函数中,也可能与调用相距甚远,带来的可读性较差。

为了解决上述问题,Python提供了按照形参名称输入实参的方式,此时函数调用如下:

在这里插入图片描述

由于调用函数时指定了参数名称,所以参数之间的顺序可以任意调整。

函数的返回值

return 语句用来退出函数并将程序返回到函数被调用的位置继续执行。return 语句可以同时将0个、1个或多个函数运算后的结果返回给函数被调用处的变量。

在这里插入图片描述

函数可以没有return,此时函数并不返回值。函数也可以用return返回多个值,多个值以元组类型保存。

在这里插入图片描述

函数对变量的作用

一个程序中的变量包含两类:全局变量局部变量

  • 全局变量指在函数之外定义的变量,一般没有缩进,在程序执行全过程有效。
  • 局部变量指在函数内部使用的变量,仅在函数内部有效,当函数退出时变量将不存在。

在这里插入图片描述

这个例子说明,当函数执行完退出后,其内部变量将被释放。

如果希望让func()函数将n当作全局变量,需要在变量n使用前显式声明该变量为全局变量。

在这里插入图片描述

代码复用和模块化设计

程序由一系列代码组成,如果代码是顺序但无组织的,不仅不利于阅读和理解,也很难进行升级和维护。因此,需要对代码进行抽象,形成易于理解的结构。当代编程语言从代码层面采用函数和对象两种抽象方式,分别对应面向过程和面向对象编程思想。

函数是程序的一种基本抽象方式,它将一系列代码组织起来通过命名供其他程序使用。函数封装的直接好处是代码复用,任何其他代码只要输入参数即可调用函数,从而避免相同功能代码在被调用处重复编写。代码复用产生了另一个好处,当更新函数功能时,所有被调用处的功能都被更新。

面向过程是一种以过程描述为主要方法的编程方式,该方法要求程序员列出解决问题所需要的步骤,然后用函数将这些步骤一步一步实现,使用时依次建立并调用函数或编写语句即可。面向过程编程是一种基本且自然的程序设计方法,函数通过将步骤或子功能封装实现代码复用并简化程序设计难度。

对象是程序的一种高级抽象方式,它将程序代码组织为更高级别的类。对象包括表征对象特征的属性和代表对象操作的方法。例如,汽车是一个对象,其颜色、轮胎数量、车型是属性,代表汽车的静态值;前进、后退、转弯等是方法,代表汽车的动作和行为。在程序设计中,如果<a>代表对象,获取其属性<b>采用<a>.<b>,调用其方法<c>采用<a>.<c>()。对象的方法具有程序功能性,因此采用函数形式封装。简单地,对象是程序拟解决计算问题的一个高级别抽象,它包括一组静态值(属性)和一组函数(方法)。从代码行数角度来看,对象和函数都使用了一个容易理解的抽象逻辑,但对象可以凝聚更多代码。因此,面向对象编程更适合代码规模较大,交互逻辑复杂的程序。

递归

函数定义中调用函数自身的方式形成递归。


练习题

判断题

  1. 函数必须有返回语句。(×)
  2. 函数使用保留字 global 声明全局变量。(√)
  3. 函数定义中调用函数自身的方式形成递归。(√)
  4. 函数内定义的变量默认为全局变量。(×)

简答题

说说你对函数或者程序模块化设计的理解?

言之有理即可。

填空题

  1. Python 使用 ___ 关键字定义函数。(def)
  2. Python 函数使用 ___ 关键字返回函数值。(return)
  3. Python 函数在返回多个值时使用 ___ 数据类型。(元组)

选择题

1.以下哪个关键字用于定义Python函数?
A. def
B. function
C. define
D. func
​​答案:A​​

2.Python函数中,return语句的作用是?
A. 终止函数执行
B. 返回一个值并退出函数
C. 打印输出结果
D. 循环执行函数
​​答案:B​​

3.以下哪个是函数的正确调用方式?
A. my_function()
B. call my_function
C. function my_function
D. run my_function
​​答案:A​​

http://www.xdnf.cn/news/12098.html

相关文章:

  • 栈的应用:表达式求值
  • AIGC 基础篇 高等数学篇 03 中值定理与导数应用
  • 系统巡检常见工作
  • 标准IO及相关函数介绍
  • 中电金信:从智能应用到全栈AI,大模型如何重构金融业务价值链?
  • [Java 基础]面向对象-继承
  • QML技术优势
  • GuessNumber
  • CET6 仔细阅读 24年12月第三套-C2 美的定义这一块
  • 【opnecv】检测桌子上多余的物品
  • 《复制粘贴的奇迹:小明的原型工厂》
  • python打卡第44天
  • AI大模型学习三十二、飞桨AI studio 部署 免费Qwen3-235B与Qwen3-32B,并导入dify应用
  • CSS 选择器全解析:分组选择器/嵌套选择器,从基础到高级
  • 关于如何运用AI的思考
  • Day44 Python打卡训练营
  • ATM存取钱项目
  • 【DeepSeek 学大模型推理】Fused Residual LayerNorm with Reduce-Scatter
  • MySQL事务:从ACID特性到高并发优化的深度解析
  • day 44
  • K8S主机漏洞扫描时检测到kube-服务目标SSL证书已过期漏洞的一种永久性修复方法
  • 【论文写作】如何撰写基于模型拼接(A+B)的创新性论文
  • leetcode 二叉搜索树中第k小的元素 java
  • SiFli 567+emmc Standby休眠报错问题
  • 重装系统+驱动+磁盘分区
  • day19 leetcode-hot100-37(二叉树2)
  • 5.29-6.4解决问题归纳
  • 银行用户信誉等级
  • 前端面试宝典---vite原理解析
  • Numpy——结构化数组和Numpy文件