目录
第四章 函数入门
01 函数的介绍
02 函数的定义
03 函数的参数
04 函数的返回值
定义语法
None类型
05 函数说明文档
06 函数的嵌套调用
07 变量的作用域
局部变量
全局变量
综合案例
函数究竟是什么呢?
在数学中,我们通常称能够表达一类数学模型的某项表达式为函数,而在计算机中,我们将一种已经组织好的,可重复使用的,用来实现特定功能的代码段定义为函数。
接下来我们看看,我们自己写一遍,代码和运用已有的函数有什么区别
纯用代码 利用函数所以我们心中的一个问题就可以得到答案了,究竟我们到底为什么要去学习函数呢?
可以让我们得到一个针对特定需求、可供重复利用的代码段,从而提高程序的复用性,减少重复性代码,提高开发效率。
函数的定义语法一般为:
def 函数名(传入参数):
函数体
return 返回值
函数定义之后实际上是不会运行的,就好比我们只生产了机器设备但并没有通电运行,接下来我们就要对函数进行调用,通上这个函数的“电源”。
函数的调用为
函数名(参数)
#注意:1.参数如果我们不需要的话,可以对其省略。
2.返回值如果我们不需要的话,可以对其省略。
3.函数必须先定义之后才能调用。
传入参数到目前为止应该是我们新接触的知识,那么这个功能到底有什么作用呢?
传入参数的功能是:在函数进行计算时,接受外部调用时提供的数据。
在上述例子中,函数定义中提供的x和y称之为形式参数,即形参。表示函数声明中将要使用2个参数;而在函数调用中提供的5和6则称之为实际参数,即实参。表示函数执行时真正使用的参数值。
要注意,无论是实参还是形参,在传入时,都需要按照顺序传入数据,并且参数之间应使用逗号分割开来。
函数的使用是不受限制的,在使用中可以选择不使用参数,也可使用任意个参数。
返回值,举个例子就好像,你让你的朋友帮你买个东西,最后他把东西买回来给了你。
其中,你的朋友就是函数本身,买的东西就是传入参数,买东西的过程是函数体,然后最后朋友将买回来的东西给你,这就叫返回值。
正经的说,返回值就是函数在执行完成后返回给调用者的数据结果。
返回值的基本语法是
def 函数(传入参数):
函数体
return 返回值
变量 = 函数(参数)
当return出现,当前层级之后的代码都不再运行。
在函数的定义章节,我们曾经说过,返回值可以进行省略,那么如果函数没有使用return语句返回数据,函数有没有返回值?
这个问题很简单,无论到底有没有return语句,函数均有返回值。
实际上返回值不是不存在,而是替代了。这依赖于python中一个特殊的字面量——None,其类型是:
None表示空的、没有实际意义的意思。函数返回的None就表示这个函数没有返回什么有意义的内容,也就是返回到了空的意思。
那么None都能用在哪些场景呢?
1.用在函数无返回值上
2.用在if判断上
在if判断中,None等同于假False
一般用于在函数中主动返回None,配合if判断做相关处理
3.用在声明无内容的变量上
需要定义变量,但暂时不需要变量有具体值,就可以用来None代替。
函数是纯代码语言,想要理解其含义,就需要一行一行的去阅读理解代码,效率就会比较低。
前面学过,我们可以给代码中加入注释来对部分代码进行解释说明。那么同样的,我们也可以给函数中添加说明文档,辅助理解函数的作用。
基本语法如下:
def func(x, y)
"""
函数说明
param x:对形参x的说明
param y:对形参y的说明
return:返回值的说明
"""
通过多行注释的形式,对函数进行说明解释。但注意,内容应写在函数体之前。
小技巧:在某些软件(如pycharm)中,通过鼠标悬停在函数名上,可以查看函数的说明文档。
所谓函数的嵌套,就是指一个函数里面有调用了另一个函数。
并且要知悉,如果函数a中调用了另一个函数b,那么函数a执行到函数b时会先把函数b中的任务都执行完成后才会回到上次函数a所执行的位置。
变量作用域指的是变量作用的范围,即变量在哪里可用?在哪里不可用?主要分为两类:局部变量和全局变量。
所谓局部变量指的是定义在函数体内部的变量,即只在函数体内部生效,在函数外部访问则立即报错。
其作用是:在函数体内部临时保存数据,即当函数调用完成后,则销毁局部变量。
所谓全局变量,只是在函数体内、外部都能生效的变量。
由上述演示可知,全局变量定义后即使在函数内部再次设置也不会发生改变,那么究竟怎么做才能在函数中改变全局变量呢?
这是我们就需要引入一个概念叫做global关键字,用global关键字可以在函数内部声明变量为全局变量。
ATM程序实现
money = 5000000
name = None
name = input("尊敬的顾客您好,请输入您的姓名:")
#余额查询界面
def query(show_head):
if show_head:
print("--------------查询余额--------------")
print(f"尊敬的{name}您好,您账户的余额为{money}")
#定义存款函数
def saving(num):
print("--------------存款界面--------------")
global money
money += num
print(f"尊敬的{name}您好,恭喜您存款{num}元成功")
query(False)
#定义取款函数
def outing(num):
print("--------------取款界面--------------")
global money
money -=num
print (f"尊敬的{name}您好,恭喜您取款{num}元成功")
query(False)
#定义主菜单函数
def main():
print("--------------主菜单界面--------------")
print(f"尊敬的{name}您好,欢迎来到黑马银行ATM")
print("查询余额请按\t\t[1]")
print("存入金额请按\t\t[2]")
print("取出金额请按\t\t[3]")
print("退出账户请按\t[任意键]")
return input("请您选择接下来要进行的操作")
#设置无限循环,确保程序不退出
while True:
keyboard_input = main()
if keyboard_input == "1":
query(True)
continue
elif keyboard_input == "2":
saving(int(input("请输入您需要存入的金额")))
continue
elif keyboard_input == "3":
outing(int(input("请输入您需要取出的金额")))
continue
else:
break