展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

函数

  • 函数定义

  • 调用函数

函数名(参数)
  • 注意事项
参数如不需要,可以省略
返回值如不需要,可以省略
函数必须先定义后使用
  • 案例1
# 定义一个函数,输出相关信息
def say_hi():
    print("Hi 我是黑马程序员,学Python来黑马")

# 调用函数,让定义的函数开始工作
say_hi()
  • 传入参数
# 定义2数相加的函数,通过参数接收被计算的2个数字
def add(x, y, z):
    result = x + y + z
    print(f"{x} + {y} + {z}的计算结果是:{result}")

# 调用函数,传入被计算的2个数字
add(5, 6, 7)
  • 注意事项
函数定义中的参数,称之为形式参数
函数调用中的参数,称之为实际参数
函数的参数数量不限,使用逗号分隔开
传入参数的时候,要和形式参数一一对应,逗号隔开
  • 案例2
# 定义函数,接收1个形式参数,数字类型,表示体温
def check(num):
    # 在函数体内进行判断体温
    print("欢迎来到黑马程序员!请出示您的健康码以及72小时核酸证明,并配合测量体温!")
    if num <= 37.5:
        print(f"体温测量中,您的体温是:{num}度,体温正常请进!")
    else:
        print(f"体温测量中,您的体温是:{num}度,需要隔离!")

# 调用函数,传入实际参数
check(37.6)
  • 返回值
# 定义一个函数,完成2数相加功能
def add(a, b):
    result = a + b
    # 通过返回值,将相加的结果返回给调用者
    return result
    # 返回结果后,还想输出一句话
    print("我完事了")

# 函数的返回值,可以通过变量去接收
r = add(5, 6)
print(r)
  • None类型
# 无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)}")

# None用于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用于声明无初始内容的变量
name = None
  • 函数说明文档
# 定义函数,进行文档说明
def add(x, y):
    """
    add函数可以接收2个参数,进行2数相加的功能
    :param x: 形参x表示相加的其中一个数字
    :param y: 形参y表示相加的另一个数字
    :return: 返回值是2数相加的结果
    """
    result = x + y
    print(f"2数相加的结果是:{result}")
    return result

add(5, 6)
  • 函数嵌套
# 定义函数func_b
def func_b():
    print("---2---")

# 定义函数func_a,并在内部调用func_b
def func_a():
    print("---1---")
    # 嵌套调用func_b
    func_b()
    print("---3---")

# 调用函数func_a
func_a()
  • 变量作用域
局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量

全局变量,指的是在函数体内、外都能生效的变量

使用 global关键字 可以在函数内部声明变量为全局变量
  • 代码案例
# 演示局部变量
def test_a():
    num = 100
    print(num)

test_a()
# 出了函数体,局部变量就无法使用了,下面的print会报错
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():
    num = 500       # 局部变量
    print(f"test_b: {num}")

test_a()
test_b()
print(num)  # 200

# -----------------------------------------------

# global关键字,在函数内声明变量为全局变量
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)  # 500
  • 应用实例
# 定义全局变量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]")    # 通过\t制表符对齐输出
    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退出循环
posted @ 2022-10-10 14:28  DogLeftover  阅读(112)  评论(0)    收藏  举报