目录

  • 一、函数的定义
    • (一)def关键字定义函数
    • (二)形参和实参
    • (三)全局变量和局部变量
  • 二、函数的调用
  • 三、函数的参数传递
    • (一)必需参数
    • (二)关键字参数
    • (三)默认参数
    • (四)不定长参数
    • 1、元组形式导入(*)
    • 2、字典形式导入(**)
  • 四、匿名函数
  • 五、递归函数

一、函数的定义

函数,也就是为了提高代码复用性、降低代码冗余的一种方式,将功能代码定义为一个函数。

(一)def关键字定义函数

通过关键字def来定义函数,函数要有函数名和参数以及函数体等等。
def后跟函数名和圆括号(),括号内是参数(参数也可以为空,此时则称该函数为无参函数),且函数内容以冒号:来表示这个函数的起始。
函数内的内容,也就是函数体,它是实现函数具体功能的代码。
另外还有return语句,它用于将函数的处理结果返回给调用该函数一方或者退出函数,若函数没有返回值,则不需要加上return语句,即相当于返回none。

def 函数名 (参数或参数列表):函数体[return 语句]

(二)形参和实参

形参,即形式参数,可以说它是虚拟变量,而实参,即实际参数,即调用函数时传入的参数。
形参的目的是接收实参,被调用时分配内存单元,实参赋值给形参, 调用结束后, 形参释放所分配的内存单元 。注意实参是以按地址传递方式将值传递给形参,即实参的地址传递给形参,实际上实参是程序中使用的参数。

(三)全局变量和局部变量

简单的来说,局部变量是在函数内定义的变量,只能在定义它的函数中使用;而全局变量,是定义在函数之外的变量,它可以在程序的任何位置使用。
在函数中只能访问全局变量,但不能修改全局变量,若要在函数内部修改全局变量的值,则需在函数中通过global关键字声明。
例如下列python代码,在fein()函数中修改全局变量a,首先要对它该变量使用global关键字声明:

a = 1
def fein():global a#通过global关键字声明全局变量a *= 2print(a)fein()#调用fein()函数

运行结果如下:

二、函数的调用

通过函数名(参数或参数列表)来调用函数。
下列python代码,input_number()函数是个无参函数,它通过input_number()来调用该函数,number_max()函数带有三个参数,在调用number_max()时向该函数传入了三个实参,该函数的功能是输出传入的参数:

def input_number():print("这是一个无参函数。")
def number_max(x, y, z):print(x, y, z)input_number()
number_max(3, 0, 1)

运行结果如下:

三、函数的参数传递

根据实参传递给形参的方式,可分为必需参数、关键字参数、默认参数和不定长参数。

(一)必需参数

必需参数,即将实参按照位置顺序传递给形参。
如下python代码,div()函数中的实际参数和形式参数有相应的位置关系,分别传递给不同的形参:

def div(num1, num2, num3):print(num3 + num1 - num2)
div(3,2,9)
def content_input(content):print(content)content_input("内容。。。")

运行结果如下:

(二)关键字参数

可以通过形参=实参的形式,根据形参的名称进行传递。
如下python代码:

def info(name, sex, age):print(f"名字:{name}")print(f"性别:{sex}")print(f"年龄:{age}")info(name="xiaoming", sex="男", age=18)

运行结果如下:

(三)默认参数

在调用函数时,若没有传递值给形参参数,则会使用默认参数,即参数的默认值。若对带有默认值的形参传递,则实参的值会覆盖设置的默认值。
另外函数中,调用默认参数应放在其它实参后。
例如下列python代码:

def info(name, sex, age, garde=1):print("名字: ", name)print("性别: ", sex)print("年龄: ", age)print("年级: ", garde)info(name="xiaoming", sex="男", age=18)

调用该函数时,由于未给garde传参,形式参数garde使用默认值1,运行结果如下:

若形式参数garde使用传入值,则会覆盖设置的默认参数,python代码如下:

def info(name, sex, age, garde=1):print(f"名字:{name}")print(f"性别:{sex}")print(f"年龄:{age}")print(f"年级:{garde}")info(name="xiaoming", sex="男", age=18, garde=2)

运行结果如下,输出的年级garde值为1,默认值garde=1被覆盖:

(四)不定长参数

当调用函数时,传入的参数不确定时,就可使用不定长参数,它可处理比声明时更多的参数。

1、元组形式导入(*)

在创建函数时,将参数前面加上*,加上*号的参数被接收后会以元组的形式导入。
下列python代码,调用函数时2传递给the_one形参,后面的3……都被传递给the_else形参:

def f(the_one, *the_else):print(the_one)print(the_else)f(2, 3, "s", "t", 0, "c")

运行结果如下:

2、字典形式导入(**)

在创建函数时,将参数前面加上**,加上**号的参数被接收后会以字典的形式导入。
下列python代码,调用函数时2传递给the_else形参,后面的a=0……都被传递给the_else形参:

def f(the_one, **the_else):print(the_one)print(the_else)f(2, a=0, b=0.1, c=0.2)

运行结果如下:

四、匿名函数

通过使用lambda来创建匿名函数,它是一种无需定义函数名的函数,可以通过变量来记录该函数。
相比普通函数,其只能是单个表达式,即lambda函数的语法中只包含一个语句,所以其功能比较单一且不能被其它程序使用。
下列python代码,通过变量number_sum记录该匿名函数:

number_sum = lambda a, b, h: (a + b) * h * 0.5
print(number_sum(2, 3, 1.5))

运行结果如下:

五、递归函数

递归函数,它可直接或间接地调用函数自身。其中函数递归时,要有递归公式和边界条件,递归公式用于分解规模较大的问题为规模较小的问题,边界条件用于终止递归函数。
例如下列python代码:

def f(x):if x == 1:return 1else:return x + f(x - 1)print(f(4))

运行结果如下:

可以这样理解,通过递归依次求得f(x-1)的值,从而得到f(x)的值,如下图:

Python程序开发——第五章 函数相关推荐

  1. Python程序开发——第七章 模块与包

    目录 一.模块的定义 二.导入模块.调用模块 (一)import语句 (二)from-import语句 三.标准模块库 (一)sys模块 (二)os模块 (三)random模块 (四)time模块 四 ...

  2. python - 啃书 第五章 函数

    函数定义和调用 函数定义 函数是:组织好的,可重复使用的,用来实现单一或相关联功能的代码段. 在程序中,函数的使用能提高应用的模块性.代码的重用率和可读性. 自定义函数的一般格式为: def 函数名( ...

  3. Python程序开发——第六章 类与对象

    目录 一.类 (一)类.对象 (二)类的定义 (三)对象的创建和使用 二.限制对象访问 (一)定义私有成员.方法 (二)访问私有成员.方法 三.构造方法和析构方法 (一)构造方法 (二)析构方法 四. ...

  4. Python程序开发——第四章 字典与集合

    目录 一.字典 (一)字典的创建 (二)字典的访问 (三)字典的增删改查 1.字典的添加 2.字典的删除 3.字典的修改 4.字典的查询 二.集合 (一)集合的分类 (二)集合的创建 (三)集合元素的 ...

  5. Python程序开发——第三章 列表与元组

    目录 前言 一.列表 (一)列表的创建 (二)访问列表元素 (三)列表的增删改 (四)列表的遍历 (五)列表的排序 (六)列表的嵌套 二.元组 (一)元组的创建 (二)访问元组元素 (三)元组的连接组 ...

  6. Python程序开发——第一章 基本python语法

    目录 前言 一.PyCharm (一)创建工程文件夹 (二)创建 python 文件并运行 二.IDLE 三.Python中的注释用法 四.变量的命名事项 五.基本输入和输出函数 (一)输入和输出 ( ...

  7. 【python第五章——函数】

    python第五章--函数 第五章--函数 5.1函数概述 5.2 函数进阶 下面部分之后再写 5.3函数习题(一些小例子) 第五章--函数 5.1函数概述 快速入门: #定义函数 def func( ...

  8. 《Go语言圣经》学习笔记 第五章函数

    <Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...

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

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

最新文章

  1. 在启用sharepoint portal server 2003的SSO时,提示“无法连接到数据库服务器,请检查配置账户的权利”的问题的解决方法...
  2. Android UI之ImageButton(带图标的按钮)
  3. 安卓APP_ 其他(1) —— 程序的签名打包并在手机上运行
  4. (王道408考研操作系统)第二章进程管理-第一节4:进程通信(配合Linux)
  5. oracle 表字段顺序_Oracle数据库如何修改表中字段顺序
  6. Flink所使用到maven依赖
  7. java in array_ArrayList to Array Conversion in Java
  8. HDU2602(背包)
  9. 操作系统真象还原_一步步编写操作系统 43 二进制程序的加载方式3
  10. LaTeX组件:texlive2019+texstudio+sumatraPDF 安装包及学习手册
  11. 虚幻4 ai蓝图_高效AI自我监督学习的迷人蓝图
  12. MATLAB 神经网络函数
  13. “磁碟机”病毒疫情紧急!已有超过5万台电脑被感染
  14. 推荐3个快速开发平台 前后端都有 接私活又有着落了
  15. 【转载】《武学求真录》和《逝去的武林》及《老拳师的故事》 -3
  16. VSCode绿豆沙主题,爱护你的眼睛,丢掉深色背景
  17. 3D坦克大战游戏iOS源码
  18. 杭电 2072 单词数(题解+代码)
  19. 【POJ1182】食物链+思路+代码(较全)
  20. java轿煤悝炾厍桴,javascript实现根据汉字获取简拼

热门文章

  1. 思科:2022年视频将占移动通信流量79%
  2. 一文入门 Kafka
  3. Linux系统——架构浅析
  4. 直播预告|中台基石腾讯云TStack的正确使用姿势
  5. 深入浅出百亿请求高可用Redis(codis)分布式集群揭秘
  6. golang 结构体 slice 排序
  7. leetcode 225. 用队列实现栈(维护两个队列用于倒替元素,使用和1进行按位与,实现队列切换)
  8. leetcode 171. Excel表列序号
  9. 【计组实验】P3 Verilog多周期处理器开发 MIPS指令集
  10. java 8 lambda表达式中的异常处理