第五章
1、认识函数
函数是组织好的,可重复使用的,用来实现特定功能的代码段
使用函数的好处:
- 将功能封装在函数内,可供随时随地的重复利用
- 提高代码的复用性,减少重复代码,提高开发效率
案例:不使用内置函数(),完成字符串长度的计算
# 统计字符串的长度,不使用内置函数len()
str1 = "itheima"
str2 = "itcast"
str3 = "python"
# 定义一个计数变量
count = 0
for i in str1:
count += 1
print(f"字符串{str1}的长度是:{count}")
count = 0
for i in str2:
count += 1
print(f"字符串{str2}的长度是:{count}")
count = 0
for i in str3:
count += 1
print(f"字符串{str3}的长度是:{count}")
# 可以使用函数,来优化代码
def my_len(data):
count = 0
for i in data:
count += 1
print(f"字符串{data}的长度是{count}")
my_len(str1)
my_len(str2)
my_len(str3)
2、函数的基础语法
# 定义一个函数,输出相关信息
def say_hi():
print("hi,我是黑马程序员")
# 调用函数,让定义的函数开始工作
say_hi()
# 定义一个函数,函数任意,要求用调用函数后可以输出如下语句:
# 欢迎来到黑马程序员,请出示您的建康码以及72小时核酸证明
def check():
print("欢迎来到黑马程序员!")
print("请出示您的建康码以及72小时核酸证明!")
check()
3、函数的传入参数
- 函数的传入参数的作用是:在函数运行时,接受外部传入的数据
- 传入的参数的数量是不受限制的:可以不使用参数、也可以仅使用任意n个参数
# 定义两个相加的函数,通过参数接受两个被计算的2个数字
# 函数定义中,提供的x和y,称之为形式参数,表示函数声明将要使用两个参数
# 在函数调用中,提供的5和6,称之为实际参数,表示函数执行时真正是哟个的参数值
def add(x,y):
result = x+y
print(f"{x} + {y}的结果是:{result}")
# 调用函数,传入被计算的两个数字
add(5,6)
# 案例:升级自动查核酸
def check(num):
# 在函数体中进行体温判断
print("欢迎来到黑马程序员,请出示您的健康吗以及72小时核酸证明,并配合测量体温")
if num <=37.5:
print(f"体温测量中,您的体温是:{num}度,体温正常请进!")
else:
print(f"体温测量中,您的体温是:{num}度,需要隔离")
# 调用函数,传入实际参数
check(37.3)
4、函数的返回值定义语法
- 什么是函数的返回值:函数在执行完成后,返回给调用者的结果
- 使用关键字return来返回结果
- 函数体在遇到return后就结束了,所以写在return后的代码就不会执行
# 定义一个函数,完成2数相加功能
def add(a, b):
result = a + b
# 通过返回值,将相加的结果返回给调用者
return result
# 函数的返回值,可以通过变量去接受
r = add(5, 6)
5、返回值none
- 什么是none:是nonetype的字面量,用于表示,空的,无意义的
- 使用场景:函数返回值、if判断、变量定义
# 无return语句的函数返回值
def say_hi():
print("你好呀")
result = say_hi()
print(f"无返回值函数,返回的内容是:{result}")
print(f"无返回值函数,返回的内容类型是:{type(result)}")
# 主动返回none的函数
def say_hi2():
print("你好呀")
return None
result = say_hi2()
print(f"无返回值函数,返回的内容是:{result}")
print(f"无返回值函数,返回的内容类型是:{type(result)}")
def check_age(age):
if age > 18:
return "SUCCESS"
else:
return "None"
result = check_age(16)
if not result:
print("未成年,不可以进入")
# 变量定义
name = None
6、函数的返回值
# 定义函数,进行说明文档
def add(x, y):
"""
add函数可以接收两个参数,进行两数相加的功能
:param x:形参x表示相加其中的一个数
:param y:y表示相加的另一个数
:return:返回值是2书数相加的结果
"""
result = x + y
print(f"2数相加的结果是:{result}")
return result
add(5, 6)
7、函数的嵌套调用
# 定义函数func_b
def func_b():
print("---2---")
# 定义函数func_c,并在内波调用func_b
def func_a():
print("---1---")
# 嵌套调用func_b
func_b()
print("---3---")
# 调用函数func_a
func_a()
8、变量在函数中的作用域
# 变量在函数中的作用域
# 演示局部变量
# def tesr_a():
# num = 100
# print(num)
# tesr_a()
# # 出了函数体,局部变量就不可以用了
# print(num)
# 演示全局变量
# num = 200
# def test_a():
# print(f"test_a:{num}")
# def test_b():
# print(f"test_b:{num}")
#
# test_a()
# test_b()
# print(num)
# 演示全局变量
num = 200
def test_a():
print(f"test_a:{num}")
def test_b():
global num # 设置内部定义的变量为全局变量
num = 500 # 局部变量
print(f"test_b:{num}")
test_a()
test_b()
print(num)
9、综合案例
# 黑马atm
# 定义全局变量money name
money = 5000000
name = None
# 要求客户输入姓名
name = input("请输入您的姓名:")
# 定义查询函数
def query(show_header):
if show_header:
print("---------查询余额----------")
print(f"{name},您好,您的剩余余额为:{money}元")
# 定义存款函数
def saving(num):
global money # 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("请输入您的选择:")
# 通过反斜杠t制表符对齐输出
# 设置无限循环,保证函数不会退出
while True:
keyword_input = main()
if keyword_input == "1":
query(True)
continue # 通过contiue,返回主菜单
elif keyword_input == "2":
num = int(input("您想要存入多少钱,请输入:"))
saving(num)
continue
elif keyword_input == "3":
num = int(input("您想要去多少钱?,请输入:"))
get_money(num)
continue
else:
print("程序退出啦")
break