函数
函数的初体验:
函数是组织好的,可重复使用的,用来使用实现特殊功能的代码段。
举例:len()函数计算字符串的长度,是python的内置函数。其他还有input,str等等。
案例学习:
python的print字符串前面加f表示格式化字符串,加f后可以在字符串里面使用用花括号括起来的变量和表达式,如果字符串里面没有表达式,那么前面加不加f输出应该都一样
自己写一个计算字符串长度功能:
str1="ithemia"
str2="itcast"
str3="python"
#定义一个计数变量
count=0
for i in str1:
count+=1
print(count)
count=0
for j in str2:
count+=1
print(count)
count=0
for k in str3:
count+=1
print(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)
函数的定义:
语法结构:
def 函数名(参数):
函数体
return 返回值
调用函数:
函数名(参数)
案例学习:
def say_hi():
print("hi 我是python程序员")
#调用函数,让定义的函数工作
say_hi()
先执行第4行,在执行第1行
注意事项:
参数不需要可以省略
返回值不需要可以省略
一定要先定义在使用
练习案例:
def he_suan():
print("请出示健康码和48小时核酸证明")
he_suan()
函数的参数:
在函数计算时能够接受外部(调用时)提供的数据
案例学习:
定义两个相加的函数
def add(x,y):
result=x+y
print(f"x+y的结果为:{result}")
#调用函数,传入两个实参,按照顺序,逗号隔开
add(100,100)
当然也可以多个参数,也可以没有参数
#定义一个三数(形式参数)相加函数,通过参数接收被计算三个数字
def add(x,y,z):
result=x+y+z
print(f"x+y+z的结果为:{result}")
#调用函数,传入两个实参,按照顺序,逗号隔开
add(100,100,200)
注意事项:
1.编写函数时的参数为形式参数
2.调用函数时为实际
3.参数参数传入要一一对应
4.用逗号分隔开参数
练习案例:
def he_suan(temperature):
if temperature>37.5:
print(f"您的体温是:{temperature},需要隔离!")
else:
print(f"您的体温是:{temperature},体温正常请进!")
he_suan(37.6)
函数返回值:
函数返回值的定义语法:
返回值就是函数在完成事情后,返回给调用者的结果
案例学习:
def add(x,y):
result=x+y
return result
r=add(5,6)
print(r)
print("我完事了")
注意:
return 过后,函数就不会再去执行循环语句了。
返回值之None类型:
如果函数没有使用return语句其实是使用了特殊的字面量None,其类型是<class 'NoneType'>
就是返回空的意思
案例验证:
即可以不去返回,也可以直接返回None
def say_hi():
print("hi")
result=say_hi()
print(f"无返回值函数返回内容是:{result}")
print(f"无返回值函数,返回内容的类型是:{type(result)}")
def say_hi1():
print("hi")
return None
result1=say_hi1()
print(f"无返回值函数1返回内容是:{result1}")
print(f"无返回值函数1,返回内容的类型是:{type(result1)}")
结果:
None的运用场景:
None表示空,没意义,具有很多的应用场景,用在函数无返回值上。
在if语句判断中None为False,一般和函数无返回值配合。
例如:
def check_age(age):
if age>18:
return "SUCCESS"
else:
return None
result2=check_age(16)
if not result2:
#进入if证明result2是None值,也即是False
print("未成年,不可进入")
用于变量的赋值上,有些变量不需要一些具体值(无初始值),用None来代替。
例如:
name=None
函数的说明文档:
函数是纯代码语言,人类分析效率低,可以添加说明文档辅助理解函数的作用。
通过多行注释的功能,写在函数体之前,对函数体进行解释说明
语法结构:
def func(x,y):
'''
函数说明
:param x:形参x的说明
:param y:形参y的说明
:return:返回值的说明
'''
函数体
return 返回值
示例:
def add(x,y):
'''
add函数可以接收两个参数,进行两个参数相加的功能
:param x: 第一个形式变量
:param y: 第二个形式变量
:return: 返回的是两数相加的结果
'''
result=x+y
print(f"2数相加的结果是:{result}")
return result
add(5,6)#鼠标悬停,Ctrl+Q调出说明文档
函数的嵌套调用:
在一个函数里又调用了另一个函数
示例:
def func_b():
print("---------2--------")
def func_a():
print("---------1--------")
#调用func_b
func_b()
print("---------3---------")
#调用func_a
func_a()
执行流程,函数a中会执行函数b,先将函数b执行完,在执行函数A剩下的代码。
函数中变量的作用域:
变量的作用范围就是哪里可用哪里不可用
分为全局变量和局部变量
局部变量:定义在函数体内部,作用域也在函数内部。
作用:作用于函数体内部,临时保存变量,函数结束时,自动销毁
示例:
def test_a():
num=100
print(num)
test_a()
#出了函数体,局部变量不能使用
#print(num)报错
全局变量:指在函数内外都能生效的变量。
作用:作用于多个函数或函数外部
示例:
num1=200
def test_b():
print(f"test_b:{num1}")
def test_c():
print(f"test_c:{num1}")
test_b()
test_b()
print(num1)
global关键字:
在函数内部修改全局变量的值
示例:
num1=200
def test_b():
print(f"test_b:{num1}")#200
def test_c():
num1=500
print(f"test_c:{num1}")#500
test_b()
test_c()
print(num1)#200
如图所示num1在test_c函数里是500,最后输出又变回200了,这说明,在函数内部num1为一个局部变量,无法带到函数外。
如果一定要在函数内部改全局变量可以使用关键字global
示例:
num1=200
def test_b():
print(f"test_b:{num1}")#200
def test_c():
global num1
num1=500
print(f"test_c:{num1}")#500
test_b()
test_c()
print(num1)#500
综合案例:ATM
money=5000000
name=None
def ATM_find():
print(f"{name}你的账户余额为:{money}")
return None
def ATM_deposit():
data_money = input("请输入您所需要的存款金额:")
global money
money+=int(data_money)
print(f"取款{data_money}成功,余额为:{money}")
return None
def ATM_take():
data_money1=input("请输入您所需要的取款金额:")
global money
money-=int(data_money1)
print(f"存款{data_money1}成功,余额为:{money}")
return None
name=input("请输入您的姓名:")
def main():
print(f"-----------------主菜单-----------------")
print(f"{name},您好,欢迎来到学python的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":
ATM_find()
continue
elif keyboard_input=="2":
ATM_deposit()
continue
elif keyboard_input=="3":
ATM_take()
continue
else:
print("退出成功")
break
部分结果:
不积跬步无以至千里,不积小流无以成江海。