函数介绍:
定义:
函数 是 组织好的, 可重复利用的, 来实现特定功能的代码片段;
name = "祝大家新年快乐,万事如意"
lenth = len(name)
print(lenth)
案例(统计字符串长度):
str1 = "新年快乐"
str2 = "happy"
str3 = "new year"
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}")
虽然这样也可以求出字符串的长度,但是却过于重复;
一次我们可以使用函数来优化代码;
str1 = "新年快乐"
str2 = "happy"
str3 = "new year"
def my_len(data):
count = 0
for i in data:
count += 1
print(f"字符串{data}的长度是:{count}")
my_len(str1)
总结:
函数的语法:
代码展示:
def say_hi():
print("hi")
say_hi()
注意:
· 参数不需要,可省略;
· 返回值不需要,可省略;
· 函数必须先定义,后调用;
小练习:
def check():
print("欢迎来到动物园")
print("请出示72小时的核酸证明。")
check()
函数的传入参数:
传入参数的功能:在函数进行计算的时候,接受外部(调用时)提供的数据;
如:
代码展示:
def add(num1, num2):
result = num1 + num2
print(f"{num1} + {num2} = {result}")
add(1, 5)
add(2, 7)
解析:
\
注意:
函数的传入参数是不受限制的;
总结:
小练习:
"""
升级版自动查核酸
定义一个函数,名称任意,并i接受一个参数传入(数字类型,表示体温)
在函数内进行体温判断(正常范围:小于等于:37.3°),并输出如下内容:
欢迎来到动物园!请出示您的健康码以及72小时核酸证明,并配合测量体温!
体温测量中,您的体温是:37.3度,体温正常请进!
欢迎来到动物园!请出示您的健康码以及72小时核酸证明,并配合测量体温!
体温测量中,您的体温是:39.3度,需要隔离!
"""
def check_temperature(temperature):
if temperature <= 37.3:
print(f"体温测量中,您的体温是:{temperature}度,体温正常请进!")
else:
print(f"体温测量中,您的体温是:{temperature}度,需要隔离!")
print("欢迎来到动物园")
temperature = int(input("请出示您的健康码以及72小时核酸证明,并配合测量体温!体温为:"))
check_temperature(temperature)
函数的返回值:
语法格式:
def 函数名(参数):
函数体
return 返回值
变量 = 函数名(参数)
代码展示:
def add(num1, num2):
result = num1 + num2
return result
num1 = int(input("请输入num1的值:"))
num2 = int(input("请输入num2的值:"))
total_num = add(num1, num2)
print(f"{num1} + {num2} = {total_num}")
总结:
None 类型:
思考:
加入函数没有使用return语句的话,请问函数有返回值吗?
答:有的;
Python中有一个特殊的字面量:None,其类型是:<class ‘NoneType’>
无返回值的函数,实际上就是返回了:None这个字面量
即返回空的意思;
代码展示:
def say_hi():
print("hi")
result = say_hi()
print(f"无返回值的函数的结果:{result}, 类型是:{type(result)}")
def say_bye():
print("bye")
return None
result1 = say_bye()
print(f"返回值为None的函数结果为:{result}, 类型为:{type(result)}")
Node的应用类型:
None 作为一个特殊的字面量,用于表示:空,无意义,其有非常多的应用场景:
· 用在函数无返回值上;
· 用在 if 判断上:
- 在 if 判断中,None相当于False;
- 一般用在函数中主动返回None,配合 if 判断做相关处理;
def check_age(age):
if age >= 18:
return "SUCCESS"
else:
return None
result = check_age(16)
if not result:
print("未成年,禁止入内!")
· 用于声明无内容的变量上:
定义变量,但暂时不需要变量有具体值,可以使用None来代替;
name = None
总结:
函数的说明文档:
引言:
函数是纯代码语言,想要理解含义,就要一行行的读代码,效率低;
因此,我们可以为函数加上说明文档;
语法:
def func(x, y):
"""
函数说明
:param x: 形参x的说明
:param y: 形参y的说明
:return : 返回值的说明
"""
函数体
return 返回值
代码展示:
def add(num1, num2):
"""
add()函数能够传入两个形参参数,对两个参数进行求和运算
:param num1: 形参 num1 是其中一个求和数字
:param num2: 形参 num2 是另一个人求和数字
:return: 返回两个形参的和
"""
result = num1 + num2
return result
result1 = add(1, 3)
print(result1)
这样的话,我们就可以一眼看出函数的作用,而不用一行行的读代码;
效率大大提高;
而且在鼠标悬停在函数名处时,还会显示注释说明:
函数的嵌套调用:
所谓的函数调用就是在一个函数里面调用另外一个函数;
代码展示:
def say_happy():
"""
sau_happy()函数能够打印 happy
:return: 返回None
"""
print("happy")
return None
def say_new_year():
"""
say_new_year()函数能够打印new year 并且 调用 say_happy 函数
:return: 返回None
"""
say_happy()
print("new")
print("year")
return None
say_new_year()
总结:
函数中变量的作用域:
引言:
变量作用域指的是变量的作用范围(变量在哪里可用,在那里不可用)
主要分为两类:局部变量 和 全局变量
所谓局部变量是定以函数体内的变量,即只在函数体内部生效:
def testA():
num = 100
print(num)
testA() # 100
print(num) # 报错:name 'num' is not defined
所谓全局变量,指的是在函数体内,外部均能生效的变量
# 定义全局变量num
num = 100
def aestA():
print(num)
return None
def aestB():
print(num)
return None
aestA()
aestB()
print(num)
global 关键字:
※ 使用 global 关键字 可以在函数内部声明变量为全局变量,这样就可以修改全局变量,如:
# 定义全局变量num
num = 100
def aestA():
global num
num = 200
print(num)
return None
def aestB():
print(num)
return None
aestA()
aestB()
print(num)
综合案例:
"""
仁爱ATM
要求:
定义一个全局变量:money,用来记录银行卡余额(默认5000000)
定义一个全局变量:name,用来记录客户姓名(启动程序的时候输入)
定义如下函数:
查询余额函数
存款函数
取款函数
主菜单函数
程序启动时要求输入客户姓名
查询余额,存款,取款后都会返回主菜单
存款,取款后,都应显示一下当前余额
客户选择退出或输入错误,程序会退出,否则一直运行
"""
# 定义全局变量 money 和 现金
money = 5000000
wallet_money = 500000
name = "小黑子"
password = 123
# 定义 主菜单函数
def main_menu():
"""
main_menu() 函数可以打印主菜单 选择功能
:return: 返回None
"""
flag = True
while flag:
menu = """--------------主菜单--------------
查询余额 【输入1】
存款 【输入2】
取款 【输入3】
退出 【输入4】
"""
print(menu)
choice = int(input("请选择:"))
if choice == 1:
show_money()
main_menu()
elif choice == 2:
save_money()
main_menu()
elif choice == 3:
get_money()
main_menu()
elif choice == 4:
flag = False
exit()
else:
main_menu()
return None
# 定义查询余额函数
def show_money():
"""
show_money()函数 能够查询现金和银行卡余额
:return: 返回 None
"""
show_money_menu = """--------------查询余额----------
"""
global money, wallet_money
print(f"您目前的银行卡余额:{money}元")
print(f"您目前的现金余额:{wallet_money}元")
return None
# 定义存款函数
def save_money():
"""
save_money()函数 可以将现金存入银行卡
:return: 返回None
"""
flag = True
while flag:
save_money_menu = """--------------存款界面--------------
存款【输入1】 退出【输入0】
"""
print(save_money_menu)
choice = int(input("请选择:"))
if choice == 1:
money1 = int(input("请输入要存取的金额:"))
global money, wallet_money
if money1 > wallet_money:
print("您的现金不足!")
else:
money += money1
wallet_money -= money1
show_money()
flag = False
main_menu()
elif choice == 0:
flag = False
main_menu()
else:
save_money()
return None
# 定义取款函数
def get_money():
"""
get_money() 函数是将银行卡中的钱财提出
:return: 返回None
"""
flag = True
while flag:
get_money_menu = """--------------取款界面--------------
取款【输入1】 退出【输入0】
"""
print(get_money_menu)
choice = int(input("请选择:"))
if choice == 1:
money1 = int(input("请输入取款金额:"))
global money, wallet_money
if money1 > money:
print("您的账户余额不足!")
else:
money -= money1
wallet_money += money1
show_money()
flag = False
main_menu()
elif choice == 0:
main_menu()
else:
get_money()
return None
# 定义登录函数
def login_person():
"""
login_person()函数 用于用户登录
:return: 返回None
"""
x = 2
global name, password
while x:
name1 = input("用户名:")
password1 = int(input("密码:"))
if name1 == name and password1 == password:
print(f"欢迎{name}登录仁爱ATM!")
main_menu()
else:
print(f"用户名或密码错误!")
print(f"还剩下{x}次机会。")
x -= 1
login_person()