1.函数
1.函数:是组织好的,可重复使用的,用来实现特定功能的代码段
函数的意义在于为了得到一个针对特定需求,可供重复性利用的代码段,提高了程序的复用性,减少重复代码,提高开发效率。
2.函数的定义
def 函数名(传入参数):
函数体
return 返回值
函数的调用:函数名(参数)
注意事项:
1.参数如果不需要,可以省略,但是括号不能省略
2.返回值如不需要,可以省略
3.函数必须先定义后使用,定义完函数之后必须得调用才能正常使用
小练习:
定义一个函数,函数名任意,要求调用函数后可以输出如下欢迎语:
欢迎来到黑马程序员!
请出示您的健康码以及72小时核酸证明!
换行符:"\n"
def csgo ():
print("欢迎来到黑马程序员!\n请出示您的健康码以及72小时核酸证明!")
csgo()
3.函数的传入参数
传入参数的功能:在函数进行计算的时候,接收外部(调用时)提供的数据
- 传入参数的数量是不受限制的,可以不使用传入参数,也可以仅使用任意N个参数
有如下代码,完成了两个数字的相加,但是函数的功能非常局限,只能计算 1+2。
def add():
result =1 + 2
print(f"1 + 2的结果:{result}")
add()
这个时候就显示出传入参数的重要性了,有了传入参数,就可以让add函数的计算范围更加广阔,这个函数也更加实用了。
def add(x,y):
result = x + y
print(f"{x}+{y}的结果是:{result}")
add(2,3)
- 函数定义中,提供的x和y称之为:形式参数(形参),表示函数声明将要使用两个参数(参数之间使用逗号进行分隔)
- 函数调用中,提供的2和3,称之为:实际参数(实参),表示函数执行时真正使用的参数值(传入的时候,按照顺序传入数据,使用逗号分隔)
具体案例:
def temperature (x):
if x <= 37.3:
print (f"欢迎来到黑马程序员!请出示您的健康码以及72小时核酸证明,并配合测量体温!\n体温测量中,您的体温是:{x}度,体温正常请进!")
else:
print (f"欢迎来到黑马程序员!请出示您的健康码以及72小时核酸证明,并配合测量体温!\n体温测量中,您的体温是:{x}度,需要隔离!")
temperature(35)
4.函数的返回值
返回值的语法:
def 函数(参数.....):
函数体
return 返回值
变量 = 函数(参数)
- 通过return关键字,就能向调用者返回数据,这样变量就能接收到函数的返回值
def add(a,b):
result = a + b
return result
r = add(2 ,3)
print(r)
- 首先 实际参数2,3进入add函数进行加法运算,然后得出result,通过return关键字把result的具体值返回给r,然后将r打印出来。
- return后面如果有和它同级别的语句,是不会继续执行的,因为在函数体一遇到return关键字,就表明我们的函数立刻就在这里停止了
None类型
- 如果函数没有使用return语句返回数据,函数也是有返回值的。python中有一个特殊的字面量:None,其类型是:<class'NoneType'>,无返回值的函数,实际上就是返回了:None这个字面量
- None表示:空的,无实际意义的意思,函数返回的None,就表示,这个函数没有返回什么有意义的内容,也就是返回了空的意思。
def say_hi():
print("你好呀")
result = say_hi()
print(f"无返回值函数,返回的内容是:{result}")
print(f"无返回值函数,返回的内容类型是:{type(result)}")
None类型的应用场景
- 用在函数无返回值上
- 用在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("未成年,不可以进入")
else:
print("可以进入")
以上代码,当年龄为16岁的时候,进入函数,返回值是None,等同于False,然后返回给result,在python中,not是逻辑判断,用于布尔值Ture和False,not Ture和not False 分别代表 False 和 Ture。如果只写 "if result:" 就会导致16进入函数之后,由于不足18,返回值变成None,就是False,那就不会输出第一个print 里面的值了,而是输出第二个print里面的值。因为第一个print运行的条件是True。
- 用于声明无内容的变量上,定义变量,但暂时不需要内容的具体值,可以用None来代替
5.函数的说明文档
函数是纯代码语言,想要理解其含义,就需要一行行的去阅读理解代码,效率比较低。我们可以给函数添加说明文档,辅助理解函数的作用。
基础语法:
def func(x,y):
"""
函数说明
:param x:形参x的说明
:param y:形参y的说明
:return: 返回值的说明
"""
函数体
return 返回值
- 通过多行注释的形式,对函数进行说明解释,内容应写在函数体之前
6.函数的嵌套调用
所谓嵌套调用指的是一个函数里面又调用了另一个函数
def func_b():
print('-----2------')
def func_a():
print('------1-----')
func_b()
print('---------3------')
func_a()
7.变量的作用域
变量作用域指的是变量的作用范围(变量在哪里可用,在哪里不可用)
局部变量:定义在函数体内部的变量,即只在函数体内部生效
局部变量的作用:在函数体内部,临时保存数据,当调用函数完成之后,立刻销毁局部变量
def testA():
num = 100
print(num)
testA() #100
print(num) #报错: name 'num' is not defined.
全局变量:在函数体内,外都能生效的变量
num = 100
def testA():
print(num)
def testB():
print(num)
testA() #100
testB() #100
global关键字
使用global关键字,可以在函数内部声明变量为全局变量
num = 100
def testA():
print(num)
def testB():
num = 500
print(num)
testA()
testB()
print(num)
- 从上面结果可以分析出,testB的num被改变了,但是全局变量num没有改变,说明testB里面的num是局部变量,无法在testB里面修改全局变量。
num = 100
def testA():
print(num)
def testB():
global num
num = 500
print(num)
testA()
testB()
print(num)
- 使用global之后,就可以在函数体内部修改全局变量的值了
8.综合案例
#定义全局变量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(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#通过break退出循环