目录

一、函数介绍

快速体验:手动实现len()功能

二、函数的定义

练习:自动查核酸

三、函数的参数

练习:升级版查核酸(带体温判断)

四、函数的返回值

五、None类型

六、函数说明文档

七、函数的嵌套调用

八、变量的作用域

1. 局部变量

2. 全局变量

3. global关键字:在函数内修改全局变量

九、综合案例:黑马ATM系统

十、函数知识速查表


一、函数介绍

函数:组织好的、可重复使用的、用来实现特定功能的代码段。

# 已有函数示例
print(len("hello"))     # 5(len是内置函数)
print(str(100))         # 100(str是内置函数)

快速体验:手动实现len()功能

# 自定义函数,计算字符串长度
def my_len(s):
    count = 0
    for char in s:
        count += 1
    return count
​
print(my_len("hello"))   # 5
print(my_len("itheima")) # 7

函数的作用

  • 提高代码复用性

  • 减少重复代码

  • 提高开发效率


二、函数的定义

语法

def 函数名(参数):
    函数体
    return 返回值
# 示例1:定义简单的函数
def say_hello():
    print("Hello, Python!")
​
# 调用函数
say_hello()   # Hello, Python!
# 示例2:函数必须先定义后使用
# say_goodbye()  # 报错!函数未定义
​
def say_goodbye():
    print("Goodbye!")
​
say_goodbye()   # Goodbye!

练习:自动查核酸

def check_nucleic():
    print("请出示健康码")
    print("请测量体温")
    print("请出示核酸证明")
​
check_nucleic()
# 输出:
# 请出示健康码
# 请测量体温
# 请出示核酸证明

三、函数的参数

作用:接受外部传入的数据

# 示例1:两数相加(有参数)
def add(x, y):    # x和y是形参(形式参数)
    result = x + y
    print(f"{x} + {y} = {result}")
​
add(5, 6)         # 5和6是实参(实际参数) → 5 + 6 = 11
add(10, 20)       # 10 + 20 = 30
add(100, 200)     # 100 + 200 = 300
# 示例2:多个参数
def info(name, age, city):
    print(f"姓名:{name},年龄:{age},城市:{city}")
​
info("张三", 18, "北京")   # 姓名:张三,年龄:18,城市:北京
info("李四", 20, "上海")   # 姓名:李四,年龄:20,城市:上海
# 示例3:参数数量不限
def sum_all(a, b, c, d):
    return a + b + c + d
​
print(sum_all(1, 2, 3, 4))   # 10

练习:升级版查核酸(带体温判断)

def check_temperature(temp):
    print("请出示健康码")
    print("请测量体温")
    
    if temp <= 37.5:
        print(f"体温{temp}度,体温正常,请进")
    else:
        print(f"体温{temp}度,体温异常,请隔离")
​
check_temperature(36.5)   # 请出示健康码\n请测量体温\n体温36.5度,体温正常,请进
check_temperature(38.0)   # 请出示健康码\n请测量体温\n体温38.0度,体温异常,请隔离

四、函数的返回值

返回值:函数执行完成后,返回给调用者的结果

# 示例1:返回两数之和
def add(x, y):
    result = x + y
    return result   # 通过return返回结果
​
r = add(5, 6)
print(r)   # 11
# 示例2:return后的代码不执行
def test():
    print("第一行")
    return "结束"
    print("第二行")   # 这行不会执行
​
result = test()   # 第一行
print(result)     # 结束
# 示例3:返回多个值(实际是元组)
def get_info():
    return "张三", 18, "北京"
​
name, age, city = get_info()
print(name)   # 张三
print(age)    # 18
print(city)   # 北京

五、None类型

None:表示"空"、"无意义"的特殊字面量,类型是 NoneType

# 示例1:无return的函数返回None
def say_hello():
    print("Hello")
​
result = say_hello()   # Hello
print(result)          # None
print(type(result))    # <class 'NoneType'>
# 示例2:主动返回None
def do_nothing():
    return None
​
print(do_nothing())   # None
# 示例3:None在if判断中相当于False
def check_age(age):
    if age >= 18:
        return "成年"
    else:
        return None
​
result = check_age(15)
if result:          # None相当于False
    print(result)
else:
    print("未成年")   # 未成年
# 示例4:None用于声明空变量
name = None
if name is None:
    print("姓名未设置")   # 姓名未设置

六、函数说明文档

作用:通过注释解释函数的功能

def add(x, y):
    """
    两数相加的函数
    :param x: 第一个加数
    :param y: 第二个加数
    :return: 两数之和
    """
    return x + y
​
print(add(5, 3))   # 8
# 在PyCharm中,鼠标悬停在函数名上可以查看说明文档

七、函数的嵌套调用

定义:在一个函数内部调用另一个函数

def func_b():
    print("--- 开始执行B函数 ---")
    print("B函数完成")
    print("--- 结束B函数 ---")
​
def func_a():
    print("--- 开始执行A函数 ---")
    func_b()                # 嵌套调用B函数
    print("--- 结束A函数 ---")
​
func_a()
# 输出:
# --- 开始执行A函数 ---
# --- 开始执行B函数 ---
# B函数完成
# --- 结束B函数 ---
# --- 结束A函数 ---
# 更复杂的嵌套示例
def greet(name):
    print(f"你好,{name}")
​
def welcome():
    print("欢迎光临")
    greet("张三")    # 调用greet函数
​
welcome()
# 输出:
# 欢迎光临
# 你好,张三

八、变量的作用域

1. 局部变量

定义在函数内部的变量,只在函数内部生效

def test():
    num = 100      # 局部变量
    print(f"函数内部:{num}")   # 函数内部:100
​
test()
# print(num)      # 报错!函数外部无法访问局部变量

2. 全局变量

在函数内部和外部都可以使用的变量

# 全局变量
name = "张三"
​
def test():
    print(f"函数内部访问全局变量:{name}")   # 函数内部访问全局变量:张三
​
test()
print(f"函数外部访问全局变量:{name}")       # 函数外部访问全局变量:张三

3. global关键字:在函数内修改全局变量

# 错误示例:函数内直接赋值会创建局部变量
num = 100
​
def test():
    num = 200      # 这是创建了局部变量,不是修改全局变量
    print(f"函数内部:{num}")   # 函数内部:200
​
test()
print(f"函数外部:{num}")       # 函数外部:100(全局变量未被修改)
# 正确示例:使用global关键字
num = 100
​
def test():
    global num     # 声明使用全局变量
    num = 200      # 现在修改的是全局变量
    print(f"函数内部:{num}")   # 函数内部:200
​
test()
print(f"函数外部:{num}")       # 函数外部:200(全局变量被修改)
# 示例:多个函数共享全局变量
money = 5000
​
def add_money():
    global money
    money += 1000
    print(f"存款后:{money}")   # 存款后:6000
​
def sub_money():
    global money
    money -= 500
    print(f"取款后:{money}")   # 取款后:5500
​
add_money()
sub_money()

九、综合案例:黑马ATM系统

# 全局变量
money = 5000000   # 默认余额
name = None       # 客户姓名
​
def main_menu():
    """显示主菜单"""
    print("=" * 30)
    print(f"{name},您好,欢迎来到黑马ATM")
    print("1. 查询余额")
    print("2. 存款")
    print("3. 取款")
    print("4. 退出")
    print("=" * 30)
    
    choice = input("请选择操作:")
    
    if choice == "1":
        query_balance()
    elif choice == "2":
        deposit()
    elif choice == "3":
        withdraw()
    elif choice == "4":
        print("感谢使用,再见!")
        return
    else:
        print("输入有误,请重新选择")
        main_menu()
​
def query_balance():
    """查询余额"""
    print("=" * 30)
    print(f"{name},您好,您的余额是:{money}元")
    print("=" * 30)
    back_to_menu()
​
def deposit():
    """存款"""
    global money
    print("=" * 30)
    amount = int(input("请输入存款金额:"))
    money += amount
    print(f"存款成功!当前余额:{money}元")
    print("=" * 30)
    back_to_menu()
​
def withdraw():
    """取款"""
    global money
    print("=" * 30)
    amount = int(input("请输入取款金额:"))
    
    if amount > money:
        print("余额不足!")
    else:
        money -= amount
        print(f"取款成功!当前余额:{money}元")
    
    print("=" * 30)
    back_to_menu()
​
def back_to_menu():
    """返回主菜单"""
    input("按回车键返回主菜单...")
    main_menu()
​
# 程序启动
name = input("请输入您的姓名:")
main_menu()

运行示例(假设输入):

请输入您的姓名:张三
==============================
张三,您好,欢迎来到黑马ATM
1. 查询余额
2. 存款
3. 取款
4. 退出
==============================
请选择操作:1
==============================
张三,您好,您的余额是:5000000元
==============================
按回车键返回主菜单...
​
==============================
张三,您好,欢迎来到黑马ATM
1. 查询余额
2. 存款
3. 取款
4. 退出
==============================
请选择操作:2
==============================
请输入存款金额:1000
存款成功!当前余额:5001000元
==============================
按回车键返回主菜单...
​
==============================
张三,您好,欢迎来到黑马ATM
1. 查询余额
2. 存款
3. 取款
4. 退出
==============================
请选择操作:3
==============================
请输入取款金额:5000
取款成功!当前余额:4996000元
==============================
按回车键返回主菜单...
​
==============================
张三,您好,欢迎来到黑马ATM
1. 查询余额
2. 存款
3. 取款
4. 退出
==============================
请选择操作:4
感谢使用,再见!

十、函数知识速查表

知识点 语法 示例
定义函数 def 函数名(): def say_hello():
参数 def 函数名(参数): def add(x, y):
返回值 return 值 return x + y
None None return None
函数说明 三引号注释 """说明文档"""
嵌套调用 函数内调用函数 func_b()
局部变量 函数内定义 x = 10
全局变量 函数外定义 x = 10
global global 变量名 global x

return注意点

  • return执行后函数立即结束

  • 无return时函数返回None

  • 可以返回多个值(实际是元组)

变量作用域

  • 局部变量:只能在函数内部使用

  • 全局变量:可以在任何地方使用

  • 修改全局变量需要 global 关键字

更多推荐