Python快速入门专业版(二):print 函数深度解析:不止于打印字符串(含10+实用案例)

目录

  • [1.print 函数基础语法与参数原理](#1.print 函数基础语法与参数原理)
    • [1.1 官方语法定义](#1.1 官方语法定义)
    • [1.2 核心参数逐一看](#1.2 核心参数逐一看)
      • [(1)位置参数 `value, ...`](#(1)位置参数 value, ...)
      • [(2)分隔符参数 `sep`](#(2)分隔符参数 sep)
      • [(3)结尾符参数 `end`](#(3)结尾符参数 end)
      • [(4)输出目标参数 `file`](#(4)输出目标参数 file)
      • [(5)缓冲区刷新参数 `flush`](#(5)缓冲区刷新参数 flush)
  • [2.print 函数进阶实战:10+ 实用场景案例](#2.print 函数进阶实战:10+ 实用场景案例)
    • [2.1 场景1:多变量组合打印(避免字符串拼接)](#2.1 场景1:多变量组合打印(避免字符串拼接))
    • [2.2 场景2:多行文本优雅打印](#2.2 场景2:多行文本优雅打印)
    • [2.3 场景3:特殊字符精准控制(\n、\t、\r、\b)](#2.3 场景3:特殊字符精准控制(\n、\t、\r、\b))
    • [2.4 场景4:结合格式化字符串(f-string)打印](#2.4 场景4:结合格式化字符串(f-string)打印)
    • [2.5 场景5:实时日志记录(控制台+文件双输出)](#2.5 场景5:实时日志记录(控制台+文件双输出))
    • [2.6 场景6:打印复杂数据结构(列表、字典、嵌套结构)](#2.6 场景6:打印复杂数据结构(列表、字典、嵌套结构))
    • [2.7 场景7:彩色打印(结合ANSI转义码)](#2.7 场景7:彩色打印(结合ANSI转义码))
    • [2.8 场景8:打印进度条(结合end和flush参数)](#2.8 场景8:打印进度条(结合end和flush参数))
    • [2.9 场景9:打印对齐的表格(结合sep和字符串格式化)](#2.9 场景9:打印对齐的表格(结合sep和字符串格式化))
    • [2.10 场景10:打印JSON格式数据(结合json模块)](#2.10 场景10:打印JSON格式数据(结合json模块))
    • [2.11 场景11:打印到网络流(结合socket)](#2.11 场景11:打印到网络流(结合socket))
  • 3.print函数的性能与最佳实践
    • [3.1 性能优化技巧](#3.1 性能优化技巧)
    • [3.2 最佳实践总结](#3.2 最佳实践总结)
  • 4.常见问题与解决方案
    • [4.1 问题1:中文输出乱码](#4.1 问题1:中文输出乱码)
    • [4.2 问题2:print输出不及时](#4.2 问题2:print输出不及时)
    • [4.3 问题3:多线程下输出混乱](#4.3 问题3:多线程下输出混乱)
  • 总结

在 Python 编程中,print 函数是最基础也最常用的函数之一。无论是调试代码、输出运行结果,还是与用户交互,print 函数都扮演着关键角色。然而,多数开发者对 print 函数的认知仅停留在"打印字符串"的表层功能,其丰富的参数配置和灵活的应用场景尚未被充分挖掘。本文基于 Python 3.13.6 版本,从语法结构、参数原理、实战案例三个维度,全面解析 print 函数的核心能力,带您掌握从基础到进阶的使用技巧。

1.print 函数基础语法与参数原理

1.1 官方语法定义

在 Python 3.13.6 中,print 函数的官方语法如下:

python 复制代码
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

该函数支持可变数量的位置参数value, ...)和 4 个固定关键字参数(sependfileflush),各参数分工明确,共同决定输出的格式、位置和时机。

1.2 核心参数逐一看

(1)位置参数 value, ...

  • 作用:接收任意数量、任意类型的数据(字符串、数字、列表、字典等),函数会自动将其转换为字符串形式后输出。
  • 原理 :当传入多个 value 时,print 会按传入顺序依次处理,最终通过 sep 参数指定的分隔符连接成一个整体输出。
  • 基础案例
python 复制代码
# 案例1:打印单个字符串
print("Hello, Python 3.13.6!")  # 输出:Hello, Python 3.13.6!

# 案例2:打印多个不同类型的数据
name = "Alice"
age = 25
score = 98.5
hobbies = ["reading", "coding"]
print("姓名:", name, "年龄:", age, "成绩:", score, "爱好:", hobbies)
# 输出:姓名: Alice 年龄: 25 成绩: 98.5 爱好: ['reading', 'coding']

(2)分隔符参数 sep

  • 默认值' '(单个空格)
  • 作用 :指定多个 value 之间的分隔符,支持任意字符串(如 -|\t 等)。
  • 应用场景:格式化输出多组数据(如 CSV 格式、编号列表),避免手动拼接字符串的繁琐。
  • 实战案例
python 复制代码
# 案例3:用 "-" 分隔多个数字
print(2024, 9, 4, sep='-')  # 输出:2024-09-04(日期格式)

# 案例4:用 " | " 分隔多列数据
print("姓名", "年龄", "成绩", sep=" | ")
print("Bob", 22, 89, sep=" | ")
print("Charlie", 23, 92, sep=" | ")
# 输出:
# 姓名 | 年龄 | 成绩
# Bob | 22 | 89
# Charlie | 23 | 92

# 案例5:用 "\t" 实现表格对齐(制表符)
print("学科", "满分", "得分", sep="\t")
print("数学", 150, 135, sep="\t")
print("英语", 120, 110, sep="\t")
# 输出:
# 学科	满分	得分
# 数学	150	135
# 英语	120	110

(3)结尾符参数 end

  • 默认值'\n'(换行符)
  • 作用 :指定 print 函数输出结束后添加的字符,而非默认的"换行",可实现"不换行输出""自定义结尾符号"等需求。
  • 应用场景 :进度条打印、一行内分段输出、自定义结尾标识(如 !...)。
  • 实战案例
python 复制代码
# 案例6:不换行输出(用空字符串作为结尾)
print("正在加载", end='')
for i in range(5):
    import time
    time.sleep(0.5)  # 模拟加载延迟
    print(".", end='')
# 输出:正在加载.....(5个点依次打印在同一行)

# 案例7:自定义结尾符(添加感叹号)
print("欢迎使用本系统", end='!')
print("祝您操作愉快", end='\n\n')  # 手动添加两个换行
print("这是新的一行")
# 输出:
# 欢迎使用本系统!祝您操作愉快
# 
# 这是新的一行

# 案例8:用 "\r" 实现"覆盖式输出"(回车符,光标回到行首)
import time
for percent in range(0, 101, 10):
    print(f"下载进度:{percent}%", end='\r')
    time.sleep(0.8)
print("下载进度:100% - 下载完成!")
# 输出:进度从 0% 到 100% 逐步覆盖,最终显示"下载完成"

(4)输出目标参数 file

  • 默认值sys.stdout(标准输出流,即"控制台")
  • 作用 :指定 print 函数的输出目标,支持任何具有 write() 方法的"类文件对象"(如本地文件、字节流)。
  • 注意事项
    1. 若输出到文件,需确保文件路径正确,且具备读写权限;
    2. 使用 open() 函数打开文件时,需指定正确的模式(如 'w' 写入、'a' 追加);
    3. 推荐使用 with 语句管理文件,避免资源泄漏。
  • 实战案例
python 复制代码
# 案例9:输出到本地文件(覆盖写入模式)
with open("student_info.txt", "w", encoding="utf-8") as f:
    print("学生信息表", file=f)
    print("="*20, file=f)
    print("姓名:David", "年龄:24", "专业:计算机", file=f, sep=" | ")
    print("姓名:Ella", "年龄:23", "专业:英语", file=f, sep=" | ")

# 案例10:输出到本地文件(追加模式)
with open("student_info.txt", "a", encoding="utf-8") as f:
    print("\n新增学生:", file=f)
    print("姓名:Frank", "年龄:22", "专业:数学", file=f, sep=" | ")

# 验证结果(读取文件内容)
with open("student_info.txt", "r", encoding="utf-8") as f:
    content = f.read()
print("文件内容:")
print(content)
# 输出(文件内容):
# 学生信息表
# ====================
# 姓名:David | 年龄:24 | 专业:计算机
# 姓名:Ella | 年龄:23 | 专业:英语
# 
# 新增学生:
# 姓名:Frank | 年龄:22 | 专业:数学

(5)缓冲区刷新参数 flush

  • 默认值False(不主动刷新缓冲区)
  • 原理 :Python 输出时会使用"缓冲区"(临时存储数据的区域),当缓冲区满、程序结束或遇到换行符时,才会将数据写入目标(如控制台、文件)。flush=True 会强制立即刷新缓冲区,确保数据实时输出。
  • 应用场景:实时进度显示、日志实时写入、多线程/多进程下的输出同步。
  • 实战案例
python 复制代码
# 案例11:对比 flush=False 和 flush=True 的差异
print("=== 不主动刷新(flush=False)===")
for i in range(3):
    print(f"计数:{i}", end=' ')
    time.sleep(1)  # 延迟1秒,但数据会在循环结束后一次性输出
print("\n")

print("=== 主动刷新(flush=True)===")
for i in range(3):
    print(f"计数:{i}", end=' ')
    time.sleep(1)  # 延迟1秒,数据实时输出
print()

# 输出效果:
# 不主动刷新:等待3秒后,一次性显示"计数:0 计数:1 计数:2 "
# 主动刷新:每1秒显示一个"计数:x ",实时更新

2.print 函数进阶实战:10+ 实用场景案例

掌握参数原理后,我们结合实际开发需求,拆解 print 函数的进阶用法,覆盖"变量打印""特殊字符处理""格式化输出""日志记录"等核心场景。

2.1 场景1:多变量组合打印(避免字符串拼接)

传统方式通过 + 拼接字符串,需手动转换变量类型(如 str(age)),效率低且易出错;使用 print 多参数+sep 可直接打印,自动类型转换。

python 复制代码
# 传统拼接方式(繁琐)
name = "Grace"
age = 26
height = 165.5
print("姓名:" + name + ",年龄:" + str(age) + ",身高:" + str(height) + "cm")

# print 多参数方式(简洁)
print("姓名:", name, ",年龄:", age, ",身高:", height, "cm", sep="")
# 两种方式输出一致:姓名:Grace,年龄:26,身高:165.5cm

2.2 场景2:多行文本优雅打印

当需要输出长文本(如协议、说明文档)时,可结合 三引号字符串print 函数,避免手动添加 \n,同时支持格式保留。

python 复制代码
# 案例12:打印用户协议(多行文本)
user_agreement = """
==================== 用户服务协议 ====================
1. 本服务仅面向年满18周岁的用户提供;
2. 用户需妥善保管账号密码,因个人原因导致的账号安全问题,平台不承担责任;
3. 平台有权在法律法规允许的范围内调整服务条款,调整后将通过官网通知用户;
4. 若用户违反本协议,平台有权暂停或终止服务,且不退还已支付的费用。
=====================================================
"""
print(user_agreement)
# 输出:完整保留协议的换行和缩进格式,可读性强

2.3 场景3:特殊字符精准控制(\n、\t、\r、\b)

Python 支持通过"转义字符"实现特殊格式,print 函数可直接解析这些字符,满足复杂排版需求。

转义字符 作用 案例 输出效果
\n 换行 print("第一行\n第二行") 第一行 第二行
\t 制表符(约4个空格) print("A\tB\tC") A B C
\r 回车(光标回行首) print("123\r45") 453
\b 退格(删除前一个字符) print("Hello\bWorld") HellWorld
python 复制代码
# 案例13:用特殊字符打印表格
print("商品名称\t单价(元)\t库存(件)")
print("笔记本电脑\t5999\t\t120")
print("无线鼠标\t99\t\t500")
print("机械键盘\t299\t\t300")
# 输出:
# 商品名称	单价(元)	库存(件)
# 笔记本电脑	5999		120
# 无线鼠标	99		500
# 机械键盘	299		300

# 案例14:用 \b 实现"输入纠错"模拟
print("请输入密码:", end='')
password = "123456"  # 模拟用户输入
print(password, end='')
time.sleep(1)
# 模拟用户删除最后两位,重新输入
print("\b\b78")  # \b\b 删除"56",再输入"78"
# 输出:请输入密码:123478

2.4 场景4:结合格式化字符串(f-string)打印

Python 3.6+ 引入的 f-string 支持在字符串中嵌入变量,结合 print 函数可实现更灵活的格式化输出,尤其适合复杂数据展示。

python 复制代码
# 案例15:格式化打印学生成绩(保留小数、百分比)
students = [
    {"name": "Harry", "math": 89.5, "english": 92.0},
    {"name": "Ivy", "math": 95.0, "english": 88.5},
    {"name": "Jack", "math": 78.0, "english": 90.5}
]

# 打印表头
print(f"{'姓名':<10}{'数学成绩':<10}{'英语成绩':<10}{'平均成绩':<10}")
print("-" * 40)

# 打印学生数据(左对齐、保留1位小数)
for student in students:
    name = student["name"]
    math = student["math"]
    english = student["english"]
    avg = (math + english) / 2
    print(f"{name:<10}{math:<10.1f}{english:<10.1f}{avg:<10.1f}")

# 输出:
# 姓名        数学成绩    英语成绩    平均成绩    
# ----------------------------------------
# Harry      89.5       92.0       90.8       
# Ivy        95.0       88.5       91.8       
# Jack       78.0       90.5       84.3       

2.5 场景5:实时日志记录(控制台+文件双输出)

开发中常需将日志同时输出到控制台(便于实时查看)和文件(便于后续追溯),可通过自定义"类文件对象"实现 print 双输出。

python 复制代码
# 案例16:自定义双输出类(控制台+文件)
import sys

class DualOutput:
    def __init__(self, file_path, encoding="utf-8"):
        self.console = sys.stdout  # 控制台输出流
        self.file = open(file_path, "a", encoding=encoding)  # 文件输出流

    def write(self, message):
        # 同时写入控制台和文件
        self.console.write(message)
        self.file.write(message)

    def flush(self):
        # 确保缓冲区同步刷新
        self.console.flush()
        self.file.flush()

# 使用自定义双输出
dual_output = DualOutput("app_log.txt")
sys.stdout = dual_output  # 将默认输出流替换为双输出

# 模拟日志打印
import datetime
def log(message, level="INFO"):
    now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    print(f"[{now}] [{level}] {message}")

# 输出日志
log("程序启动成功")
log("读取配置文件 config.ini", "DEBUG")
log("数据库连接失败:无法连接到 127.0.0.1:3306", "ERROR")
log("程序执行完毕,退出代码 0")

# 关闭文件流
dual_output.file.close()
sys.stdout = dual_output.console  # 恢复默认输出流

# 效果:日志同时显示在控制台和 app_log.txt 文件中

2.6 场景6:打印复杂数据结构(列表、字典、嵌套结构)

print 函数可直接打印列表、字典等复杂结构,结合 sepend 可优化输出格式,避免"一行到底"的混乱。

python 复制代码
# 案例17:打印嵌套字典(用户信息)
user_data = {
    "user_id": 1001,
    "basic_info": {
        "name": "Lily",
        "gender": "Female",
        "birthday": "1998-05-12"
    },
    "contacts": [
        {"type": "phone", "value": "13800138000"},
        {"type": "email", "value": "lily@example.com"}
    ]
}

# 逐行打印用户信息
print("用户ID:", user_data["user_id"])
print("基础信息:")
for key, value in user_data["basic_info"].items():
    print(f"  - {key}:", value)
print("联系方式:")
for contact in user_data["contacts"]:
    for key, value in contact.items():
        print(f"  - {key}:", value)

# 输出:
# 用户ID: 1001
# 基础信息:
#   - name: Lily
#   - gender: Female
#   - birthday: 1998-05-12
# 联系方式:
#   - type: phone
#   - value: 13800138000
#   - type: email
#   - value: lily@example.com

2.7 场景7:彩色打印(结合ANSI转义码)

在控制台中,可通过ANSI转义码实现彩色文字输出,print函数能直接打印包含这些特殊码的字符串,让关键信息更醒目。

python 复制代码
# 案例18:彩色打印日志(不同级别不同颜色)
# ANSI颜色码定义
class Color:
    RED = '\033[91m'
    GREEN = '\033[92m'
    YELLOW = '\033[93m'
    BLUE = '\033[94m'
    RESET = '\033[0m'  # 重置颜色

# 彩色日志打印
print(f"{Color.GREEN}[SUCCESS]{Color.RESET} 数据加载完成")
print(f"{Color.YELLOW}[WARNING]{Color.RESET} 磁盘空间不足")
print(f"{Color.RED}[ERROR]{Color.RESET} 连接超时")
print(f"{Color.BLUE}[INFO]{Color.RESET} 系统版本:v2.3.1")

# 输出效果:不同级别日志以不同颜色显示(需终端支持ANSI码)

2.8 场景8:打印进度条(结合end和flush参数)

在处理耗时任务(如下载、数据处理)时,可用print函数配合end='\r'flush=True实现动态进度条,提升用户体验。

python 复制代码
# 案例19:带百分比的进度条
import time

def show_progress(total_steps):
    for step in range(total_steps + 1):
        # 计算进度百分比
        percent = (step / total_steps) * 100
        # 生成进度条字符(#表示已完成,空格表示未完成)
        bar = '#' * int(percent / 2) + ' ' * (50 - int(percent / 2))
        # 输出进度条(覆盖式打印)
        print(f"进度:|{bar}| {percent:.1f}%", end='\r', flush=True)
        time.sleep(0.1)  # 模拟任务耗时
    print()  # 进度完成后换行

# 调用进度条函数(100步任务)
show_progress(100)

# 输出效果:进度条从0%逐步增长到100%,在同一行动态更新

2.9 场景9:打印对齐的表格(结合sep和字符串格式化)

对于结构化数据(如报表、统计结果),可通过sep参数和字符串对齐功能,用print函数打印整齐的表格。

python 复制代码
# 案例20:打印销售统计表格
# 销售数据
sales_data = [
    ("产品A", 1200, 29.99, 35988.00),
    ("产品B", 850, 45.50, 38675.00),
    ("产品C", 2100, 15.80, 33180.00)
]

# 打印表头
print(f"{'产品名称':<10} | {'销量(件)':>10} | {'单价(元)':>10} | {'销售额(元)':>12}")
print("-" * 55)

# 打印数据行
for product, quantity, price, total in sales_data:
    print(f"{product:<10} | {quantity:>10} | {price:>10.2f} | {total:>12.2f}")

# 输出:
# 产品名称     |   销量(件) |   单价(元) |    销售额(元)
# -------------------------------------------------------
# 产品A        |       1200 |      29.99 |     35988.00
# 产品B        |        850 |      45.50 |     38675.00
# 产品C        |       2100 |      15.80 |     33180.00

2.10 场景10:打印JSON格式数据(结合json模块)

当需要展示API返回结果、配置文件等JSON数据时,可先用json.dumps()格式化,再通过print函数输出,确保可读性。

python 复制代码
# 案例21:打印格式化的JSON数据
import json

# 复杂嵌套数据
api_response = {
    "status": "success",
    "code": 200,
    "data": {
        "users": [
            {"id": 1, "name": "Mike", "active": True},
            {"id": 2, "name": "Nancy", "active": False}
        ],
        "pagination": {"page": 1, "total_pages": 5, "per_page": 10}
    }
}

# 格式化JSON字符串(缩进2空格,确保中文正常显示)
formatted_json = json.dumps(api_response, indent=2, ensure_ascii=False)

# 打印JSON数据
print("API返回结果:")
print(formatted_json)

# 输出:
# API返回结果:
# {
#   "status": "success",
#   "code": 200,
#   "data": {
#     "users": [
#       {
#         "id": 1,
#         "name": "Mike",
#         "active": true
#       },
#       {
#         "id": 2,
#         "name": "Nancy",
#         "active": false
#       }
#     ],
#     "pagination": {
#       "page": 1,
#       "total_pages": 5,
#       "per_page": 10
#     }
#   }
# }

2.11 场景11:打印到网络流(结合socket)

print函数的file参数支持任何带write()方法的对象,包括网络套接字(socket),可实现网络数据发送。

python 复制代码
# 案例22:通过print函数向网络发送数据(服务器端)
import socket
import sys

def network_server():
    # 创建TCP socket
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.bind(('localhost', 65432))
        s.listen()
        print("服务器启动,等待连接...")
        conn, addr = s.accept()
        with conn:
            print(f"已连接客户端:{addr}")
            # 将print输出重定向到网络连接
            sys.stdout = conn.makefile('w')
            # 通过print发送数据
            print("欢迎连接到服务器!")
            print("当前时间:", time.ctime())
            print("数据传输结束")
            # 恢复默认输出
            sys.stdout = sys.__stdout__

# 启动服务器(需在另一个终端运行客户端接收数据)
network_server()

3.print函数的性能与最佳实践

3.1 性能优化技巧

  • 减少print调用次数 :循环中频繁调用print会降低性能,建议先将内容存入列表,最后一次性打印。

    python 复制代码
    # 低效方式
    for i in range(1000):
        print(i)
    
    # 高效方式
    output = []
    for i in range(1000):
        output.append(str(i))
    print('\n'.join(output))
  • 合理使用flush参数flush=True会增加IO操作,非实时需求场景下建议保持默认flush=False

  • 避免在生产环境滥用print :正式部署的程序应使用logging模块替代print,便于日志级别控制和持久化。

3.2 最佳实践总结

  1. 参数组合使用 :灵活搭配sepend实现复杂格式,如print(a, b, sep='|', end='!\n')
  2. 输出目标管理 :写入文件时务必使用with语句,避免文件句柄泄露。
  3. 特殊场景适配 :进度条、彩色输出等场景需结合转义字符和flush=True
  4. 兼容性考虑 :ANSI颜色码在Windows终端可能需要额外配置(如colorama库)。
  5. 调试技巧 :打印变量时建议添加标识,如print("用户ID:", user_id),便于调试时定位数据。

4.常见问题与解决方案

4.1 问题1:中文输出乱码

原因 :文件编码与控制台编码不一致。
解决方案

  • 写入文件时指定encoding="utf-8"open("file.txt", "w", encoding="utf-8")
  • 确保控制台支持UTF-8编码(如Windows终端执行chcp 65001)。

4.2 问题2:print输出不及时

原因 :缓冲区未刷新,数据暂存内存中。
解决方案

  • 加换行符(\n)触发自动刷新(默认行为)。
  • 显式设置flush=Trueprint("实时输出", flush=True)

4.3 问题3:多线程下输出混乱

原因 :多个线程同时调用print,导致输出内容交织。
解决方案

  • 使用锁(threading.Lock)确保print调用的原子性。

    python 复制代码
    import threading
    
    print_lock = threading.Lock()
    
    def thread_func(name):
        with print_lock:
            print(f"线程{name}开始执行")
            # 其他操作...

总结

print函数看似简单,却蕴含着丰富的功能和灵活的应用场景。从基础的字符串输出到复杂的进度条、网络传输,从单一的控制台打印到文件、网络多目标输出,print函数在Python开发中扮演着不可或缺的角色。

本文通过11个核心场景、20+实战案例,系统讲解了print函数的参数原理与进阶用法,涵盖了从语法细节到性能优化的全维度知识。掌握这些技巧,不仅能提升代码的可读性和开发效率,更能让我们在调试、日志记录、用户交互等场景中应对自如。

在Python 3.13.6中,print函数的功能得到了进一步稳定和优化,无论是日常开发还是进阶应用,深入理解并灵活运用print函数,都将成为我们提升编程能力的重要一步。

相关推荐
java1234_小锋4 小时前
[免费]基于Python的Django+Vue图书借阅推荐系统【论文+源码+SQL脚本】
开发语言·python·django
Pocker_Spades_A4 小时前
Python快速入门专业版(一):Windows/macOS/Linux 系统环境搭建(附常见报错解决)
windows·python·macos
max5006004 小时前
YOLOv8主干网络替换为UniConvNet的详细指南
运维·开发语言·人工智能·python·算法·yolo
腾讯云qcloud07554 小时前
腾讯位置商业授权微信小程序获取城市列表
python·腾讯云ai代码助手
dlraba8024 小时前
用遗传算法破解一元函数最大值问题:从原理到 MATLAB 实现
开发语言·matlab
大模型真好玩4 小时前
深入浅出LangGraph AI Agent智能体开发教程(三)—LangGraph工具调用实战
人工智能·python·mcp
潼心1412o4 小时前
C语言(长期更新)第14讲:指针详解(四)
c语言·开发语言
怀旧,4 小时前
【C++】16. set和map
开发语言·c++
heyCHEEMS4 小时前
路径总和 Ⅱ Java
java·开发语言·深度优先