目录
Ch5 函数
一、函数定义
函数:是组织好的,可重复使用的,原来实现特定功能的代码段。
# 需求,统计字符串的长度,不使用内置函数len()
str1 = "zhugegantie"
str2 = "yuexinguowang"
#定义一个计数的变量
count = 0
for i in str1:
count += 1
print(f"字符串{str1}的长度是:{count}")
count = 0
for i in str2:
count += 1
print(f"字符串{str2}的长度是:{count}")
可以使用函数来优化这个过程:
def my_len(data):
count = 0
for i in data:
count += 1
print(f"字符串{data}的长度是{count}")
my_len(str1)
my_len(str2)
函数的定义:
def 函数名(传入参数):
函数体
return 返回值
其中,参数如不需要可以省略,但是没有参数也要有个()。返回值如不需要,可以省略。函数必须先定义后使用。
函数的调用:
函数名(参数)
eg.
def lalala():
print("欢迎来到欢乐谷\n请出示您的健康嘛及72小时核酸证明!")
lalala()
二、函数的参数
传入参数的功能是:在函数进行计算的时候,接受外部(调用时)提供的数据
eg.
def add(x,y):
result = x +y
print(f"{x}+{y}的结果是{result}")
add(1,4)
上例函数定义中,提供的x和y称之为:形式参数(形参),表示函数声明将要使用2个参数。
参数之间使用逗号分隔开。函数的调用中,提供的1和4称之为:实际参数(实参),表示函数执行时真正使用的参数值。传入时要按照顺序传入、逗号分隔。
eg.
def check(t):
print(f"欢迎来到方特,请出示您的健康码,并配合测量体温")
if t <= 37.5:
print(f"您的体温是{t},体温正常,请进。")
else:
print(f"您的体温是{t},需要隔离。")
check(37.6)
三、函数的返回值
返回值:即程序中函数完成事情后,最后给调用者的结果。
使用关键词:return来返回结果。
!:函数体在遇到return后就结束了,所以写在return后的代码不会被执行。
Python中有一个特殊的字面量:None,其类型是<class 'NoneType>
无返回值的函数,实际上就是返回了:None这个字面量。
None用于函数无返回值上。也可以用于if判断上,在if判断中,None = False。还可用于声明无内容的变量上,定义变量但暂时不需要变量有具体值时可用None来代替。
四、函数说明文档
函数是纯代码语言,想要理解其含义,就需要一行行的去阅读理解代码,效率较低。
我们可以给函数添加说明文档,辅助理解函数的作用。
语法如下:
def func(x,y):
"""
函数说明
:param x :形参x的说明
:param y :形参y的说明
:return :返回值的说明
"""
函数体
return 返回值
在PyCharm编写代码时,可以通过鼠标悬停,查看调用函数的说明文档,如下所示
五、函数的嵌套使用
指一个函数里面又调用了另一个函数。
def func_b():
print("2")
def func_a():
print("1")
func_b()
print("3")
#调用函数func_a
func_a()
输出结果:
六、变量的作用域
变量作用域指的是变量的作用范围(变量在哪里可用,在哪里不可用)
主要分为两类:局部变量(定义在函数体内部的变量,即只在函数体内部生效。作用:临时保存数据,当函数调用完后立刻销毁局部变量。出了函数体就无法使用)和全局变量(在函数体内、外都能生效的变量)
global关键字:使用global关键字可以在函数内部声明变量为全局变量,如下所示
num = 100
def testA():
print(num)
def testB():
# global 关键字声明a是全局变量
global num
num = 200
print(num)
testA()
testB()
print(num)
七、综合案例
ATM案例:
定义一个全局变量:money,记录银行卡余额(默认500000000)
定义一个全局变量:name,记录客户姓名(启动程序时输入)
定义如下函数:查询余额函数、存款函数、取款函数、主菜单函数
要求:1.程序启动后要求输入客户姓名 2.查询余额、存款、取款后都会返回主菜单 3.存取款后都显示一下当前余额 4.客户选择退出或输入错误,程序会退出,否正程序会一直运行。
# ATM
money = 5000000
name = None
name = input("请输入您的姓名:")
# 定义查询函数
def query(show_header):
if show_header:
print("-------------------------------查询余额-------------------------")
print(f"{name},您好,您的余额是{money}元")
# 定义存款函数
def saving(num):
global money
money += num
print("--------------------存款---------------------")
print(f"{name},您好,您存款{num}元成功")
# 调用query函数
query(False)
# 定义取款函数
def get_money(num):
global money
money -= num
print("--------------------取款---------------------")
print(f"{name},您好,您取款{num}元成功")
# 调用query函数
query(False)
# 主菜单
def main():
print("---------------------主菜单----------------")
print(f"{name},您好,欢迎来到诸葛集团银行ATM,请选择操作")
print("查询余额\t[输入1]")
print("存款\t\t[输入2]")
print("取款\t\t[输入3]")
print("退出\t\t[输入4]")
return input("请输入您的选择:")
# 设置无限循环,确保查询不退出
while True:
keyboard_input = main()
if keyboard_input == "1":
query(True)
continue # 通过continue继续下一次循环,进来还是主菜单
elif keyboard_input == "2":
num = int(input("您需要存款多少元,请输入"))
saving(num)
continue
elif keyboard_input == "3":
num = int(input("您需要取款多少元,请输入"))
get_money(num)
continue
else:
print("程序退出")
break # 退出循环