1、函数:是组织好的,可以重复使用的,用来实现特定功能的代码段。
例如:python内置函数len(),用于求字符串的长度。
# 需求:统计字符串的长度,不使用内置函数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 str2:
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、为什么要使用函数:为了得到一个针对特定需求、可供重复利用的代码段,提高程序的复用性,减少重复性代码,提高开发效率。
1、函数的定义:
def 函数名(传入参数):
函数体
return 返回值
2、函数的调用:
函数名(参数):
3、注意事项:
①参数如不需要,可以省略
②返回值如不需要,可以省略
③函数必须先定义后使用
# 定义一个函数,输出相关信息
def say_hi():
print("Hi 我是黑马程序员,学Python来黑马!")
# 调用函数,让定义的函数开始工作
say_hi()
定义一个函数,函数名任意,要求调用函数后可以输出以下欢迎语:
·欢迎来到黑马动物园!
·请出示您的票码以及身份证或学生证!
# 自动查票
# 定义函数
def auto_check():
print("欢迎来到黑马动物园!\n请出示您的票码以及身份证或学生证!")
# 调用函数
auto_check()
1、传入参数的功能是:在函数进行计算的时候,接受外部(调用时)提供的数据
语法解析:
· 函数定义中,提供的a和b,称之为:形式参数(形参),表示函数声明将要使用2个参数
· 参数之间使用逗号进行分隔
· 函数调用中,提供的5和6(15和55),称之为:实际参数(实参),表示函数执行时真正使用的参数值
· 传入的时候,按照顺序传入数据,使用逗号进行分隔
2、函数传入参数的数量是不受限制的。
· 可以不使用参数
· 也可以使用任意N个参数
定义一个函数,名称任意,并接受一个参数传入(数字类型,表示体温)
在函数内进行体温判断(正常范围:小于等于37.5度),并输入如下内容:
1、· 欢迎来到黑马动物园!请出示您的票码以及身份证或者学生证,并配合测量体温!
· 体温测量中,您的体温是:37.3度,体温正常请进!
2、· 欢迎来到黑马动物园!请出示您的票码以及身份证或者学生证,并配合测量体温!
· 体温测量中,您的体温是:39.3度,体温过高,不适合游玩!
# 升级版自动查票
# 定义函数
def auto_check(tem):
print("欢迎来到黑马动物园!请出示您的票码以及身份证或者学生证,并配合测量体温!")
if tem > 37.5:
print(f"体温测量中,您的体温是:{tem}度,体温过高,不适合游玩!")
else:
print(f"体温测量中,您的体温是:{tem}度,体温正常请进!")
# 调用函数
auto_check(37.3)
auto_check(39.3)
1、语法定义:
def 函数(参数):
函数体
return 返回值
变量 = 函数(参数)
2、使用关键字:return来返回结果
3、注意:函数体在遇到return后就结束了,所以写在return后的代码是不会执行的
# 函数返回值
# 定义函数,完成两数相加
def add(a, b):
result = a+ b
return result
# 调用函数,函数返回值可以通过变量来接收
r = add(5, 10)
print(r)
1、Python中有一个特殊的字面量:None,其类型是:
None表示:空的、无实际意义的意思。函数返回的None,就表示,这个函数没有返回什么有意义的内容,也就是返回了空的意思。
# 演示None
# 无return语句的函数
def say_hello():
print("Hello!")
result = say_hello()
print(result)
print(type(result))
print() # 空一行
# 有return语句的函数,None也可以主动使用return返回,效果等同于不写return语句
def say2_hello():
print("Hello!")
return None
result = say2_hello()
print(result)
print(type(result))
2、None类型的应用场景
None作为一个特殊的字面量,用于表示:空、无意义、其有非常多的应用场景:
①用在无返回值上
②用在if判断上
· 在if判断中,None等同于False
· 一般用于在函数中主动返回None,配合if判断做相关处理
# 用在if判断上
def check_age(age):
if age > 18:
return "SUCCESS"
else:
return None
result = check_age(16)
if not result:
# 进入if表示result是None值,也就是False
print("未成年,不可以进入")
③用于声明无内容的变量上
· 定义变量,但暂时不需要变量有具体值,可以用None来代替
# None用于声明无初始内容的变量
name = None
作用:函数进行说明解释,帮助更好的理解函数的功能
在PyCharm中编写代码时,可以通过鼠标悬停,查看调用函数的说明文档
1、函数的嵌套调用:一个函数里面又调用了另外一个函数
2、如果函数A中,调用了另外一个函数B,那么先把B中的任务都执行完毕后才会回到上次函数A执行的位置
# 演示嵌套调用函数
# 定义函数func_b
def func_b():
print("---2---")
# 定义函数func_a
def func_a():
print("---1---")
# 嵌套调用func_b
func_b()
print("---3---")
# 调用函数func_a
func_a()
变量作用域指的是变量的作用范围(变量在哪里可用,在哪里不可用)
主要分为两类:局部变量和全局变量
1、局部变量:定义在函数体内部的变量,即只在函数体内部生效
局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量
2、全局变量:在函数体内、外部能生效的变量
思考:如果有一个数据,在函数A和函数B中都要使用,该怎么办?
答:将这个数据存储在一个全局变量中
3、global关键字:使用global关键字,可以在函数内部声明变量为全局变量
# 演示全局变量和局部变量
num = 100
def testA():
print(num)
def testB():
num = 200
print(num)
testA()
testB()
print(num)
print() # 空行隔开
# global关键字
num = 100
def testA():
print(num)
def testB():
# global关键字声明a是全局变量
global num
num = 200
print(num)
testA()
testB()
print(f"全局变量num = {num}")
# 综合案例————黑马ATM
# 定义全局变量
money = 5000000
# 要求客户输入姓名
name = input("请输入您的姓名:")
# 定义主菜单函数
def main_menu():
print("--------主菜单--------")
print(f"{name},您好,欢迎来到黑马银行ATM,请选择操作:")
print("查询余额\t[输入1]")
print("存款\t\t[输入2]")
print("取款\t\t[输入3]")
print("退出\t\t[输入4]")
return int(input("请输入您的选择:"))
# 定义查询余额函数
def surplus_money():
print("--------查询余额--------")
print(f"{name},您好,您的余额剩余:{money}元")
print()
# 定义存款函数
def deposit_money():
print("--------存款--------")
incre_money = int(input("请输入您要存钱的数额:"))
global money
money += incre_money
print(f"{name},您好,您存款{incre_money}元成功,余额剩余:{money}元")
print()
# 定义取款函数
def withdrawal_money():
print("--------取款--------")
decre_money = int(input("请输入您要取钱的数额:"))
global money
temp_money = money - decre_money # 局部变量,用于判断取款后的余额数据是否合法
if temp_money > 0:
money -= decre_money
print(f"{name},您好,您取款{decre_money}元成功,余额剩余:{money}元")
else:
print("余额不足啦,请重新在菜单选择")
print()
# 调用函数,执行操作
while True:
keyboard_num = main_menu()
if keyboard_num == 1:
surplus_money()
continue
elif keyboard_num == 2:
deposit_money()
continue
elif keyboard_num == 3:
withdrawal_money()
continue
else:
print("程序结束啦")
break
# 运行结果如下:
"""
请输入您的姓名:小明
--------主菜单--------
小明,您好,欢迎来到黑马银行ATM,请选择操作:
查询余额 [输入1]
存款 [输入2]
取款 [输入3]
退出 [输入4]
请输入您的选择:1
--------查询余额--------
小明,您好,您的余额剩余:5000000元
--------主菜单--------
小明,您好,欢迎来到黑马银行ATM,请选择操作:
查询余额 [输入1]
存款 [输入2]
取款 [输入3]
退出 [输入4]
请输入您的选择:2
--------存款--------
请输入您要存钱的数额:2000000
小明,您好,您存款2000000元成功,余额剩余:7000000元
--------主菜单--------
小明,您好,欢迎来到黑马银行ATM,请选择操作:
查询余额 [输入1]
存款 [输入2]
取款 [输入3]
退出 [输入4]
请输入您的选择:3
--------取款--------
请输入您要取钱的数额:8000000
余额不足啦,请重新在菜单选择
--------主菜单--------
小明,您好,欢迎来到黑马银行ATM,请选择操作:
查询余额 [输入1]
存款 [输入2]
取款 [输入3]
退出 [输入4]
请输入您的选择:3
--------取款--------
请输入您要取钱的数额:5000000
小明,您好,您取款5000000元成功,余额剩余:2000000元
--------主菜单--------
小明,您好,欢迎来到黑马银行ATM,请选择操作:
查询余额 [输入1]
存款 [输入2]
取款 [输入3]
退出 [输入4]
请输入您的选择:4
程序结束啦
Process finished with exit code 0
"""