Python快速入门专业版(二十九):函数返回值:多返回值、None与函数嵌套调用

在这里插入图片描述

目录

  • 一、多返回值:一次返回多个结果的优雅方式
    • 1. 多返回值的本质:隐式封装为元组
      • 示例1:返回多个值的函数及接收方式
    • 2. 多返回值的接收技巧
      • 技巧1:用下划线`_`忽略不需要的返回值
      • 技巧2:用`*`接收剩余值(Python 3.x+)
    • 3. 实战案例:计算长方形的周长与面积
      • 案例代码实现
  • 二、无返回值函数与None:表达“无结果”的特殊值
    • 1. None的本质与作用
    • 2. 无return语句的函数:默认返回None
      • 示例2:无返回值函数的返回值
    • 3. 显式返回None:明确表达“无有效结果”
      • 示例3:显式返回None表示无效操作
    • 4. 常见误区:混淆“无返回值”与“返回空值”
      • 示例4:对比None与空值
  • 三、函数嵌套调用:函数间的协作与流程控制
    • 1. 嵌套调用的执行流程
      • 示例5:嵌套调用的执行流程演示
    • 2. 嵌套调用的优势与适用场景
      • 适用场景:
    • 3. 实战案例:数据处理流水线
      • 案例代码实现
  • 四、综合案例:学生成绩分析系统
    • 案例代码实现
  • 五、总结与提升
    • 进阶练习

函数的返回值是函数与外部世界交互的核心渠道——它不仅能将计算结果传递给调用者,还能通过特殊值(如None)表达“无结果”或“操作状态”。在实际开发中,单一返回值往往无法满足需求,此时多返回值机制、对None的灵活运用,以及函数间的嵌套调用,就成为提升代码效率和可读性的关键技巧。

本文将系统解析函数返回值的三大进阶特性:多返回值的本质与接收方式、None的含义与应用场景、函数嵌套调用的执行流程与优势,并通过“长方形计算”“数据处理流水线”等案例,展示如何通过返回值设计让函数协作更高效。

一、多返回值:一次返回多个结果的优雅方式

在很多场景下,函数需要返回多个相关结果。例如:计算长方形的周长和面积、获取一组数据的最大值和最小值、解析字符串后返回多个提取的字段。Python允许函数通过一个return语句返回多个值,这种机制既简洁又直观,但其背后的原理值得深入理解。

1. 多返回值的本质:隐式封装为元组

Python中函数的“多返回值”并非真正意义上同时返回多个独立值,而是将多个值隐式封装为一个元组(tuple)返回。例如return a, b, c等价于return (a, b, c),调用者接收的实际上是一个元组,只是Python允许通过多个变量“解包”这个元组,形成“多返回值”的表象。

示例1:返回多个值的函数及接收方式

def calculate(a, b):"""返回a与b的和、差、积"""sum_ab = a + bdiff_ab = a - bproduct_ab = a * breturn sum_ab, diff_ab, product_ab  # 等价于return (sum_ab, diff_ab, product_ab)# 调用函数,用多个变量接收返回值(自动解包元组)
sum_val, diff_val, product_val = calculate(8, 3)print(f"和:{sum_val}")     # 输出:11
print(f"差:{diff_val}")    # 输出:5
print(f"积:{product_val}") # 输出:24# 用单个变量接收(得到完整元组)
results = calculate(5, 2)
print(f"返回的元组:{results}")  # 输出:(7, 3, 10)
print(f"元组的第一个元素:{results[0]}")  # 输出:7

解析

  • 函数calculate通过return sum_ab, diff_ab, product_ab返回三个值,Python自动将它们封装为元组(sum_ab, diff_ab, product_ab)
  • 调用时,sum_val, diff_val, product_val = ...通过“元组解包”机制,将元组的三个元素分别赋值给三个变量,形成“多返回值”的直观效果。
  • 若用单个变量接收(如results),则变量直接存储整个元组,可通过索引访问其中的元素。

这种设计既保持了语法简洁,又遵循了“函数只能返回一个值”的底层逻辑,是Python“简单而不简陋”的典型体现。

2. 多返回值的接收技巧

接收多返回值时,除了“一一对应”的变量接收方式,还可利用Python的特殊语法处理部分返回值,提高灵活性。

技巧1:用下划线_忽略不需要的返回值

如果只需要部分返回值,可用下划线_(常规约定,表示“临时或无用变量”)忽略其他值:

# 只需要和与积,忽略差
sum_val, _, product_val = calculate(10, 4)
print(f"和:{sum_val},积:{product_val}")  # 输出:和:14,积:40

技巧2:用*接收剩余值(Python 3.x+)

如果返回值数量不确定,可用*接收剩余值(打包为列表):

def return_multiple():return 1, 2, 3, 4, 5# 接收前两个值,剩余值用列表接收
first, second, *rest = return_multiple()
print(f"前两个:{first}, {second}")  # 输出:前两个:1, 2
print(f"剩余:{rest}")               # 输出:剩余:[3, 4, 5]

3. 实战案例:计算长方形的周长与面积

计算长方形时,通常需要同时获取周长和面积。用多返回值函数可将这两个相关结果一次性返回,避免两次调用函数的冗余。

案例代码实现

def rectangle_info(length, width):"""计算长方形的周长和面积参数:length (float):长width (float):宽返回:tuple:(周长, 面积)"""if length <= 0 or width <= 0:print("错误:长和宽必须为正数")return None  # 无效输入返回Noneperimeter = 2 * (length + width)  # 周长 = 2×(长+宽)area = length * width             # 面积 = 长×宽return perimeter, area            # 返回两个值(元组)# 正常输入:长5,宽3
perimeter, area = rectangle_info(5, 3)
if perimeter is not None:  # 检查返回值是否有效print(f"长方形(5×3)的周长:{perimeter},面积:{area}")  # 输出:周长16,面积15# 错误输入:长为负数
result = rectangle_info(-2, 4)
print(f"错误输入的返回值:{result}")  # 输出:None

解析

  • 函数rectangle_info接收长和宽,先验证输入有效性(必须为正数),无效则返回None
  • 有效输入时,计算周长和面积,通过return perimeter, area返回元组(perimeter, area)
  • 调用时用perimeter, area接收两个结果,通过if perimeter is not None判断输入是否有效,确保后续处理安全。

这种方式将“相关结果打包返回”,既符合逻辑(周长和面积是长方形的固有属性),又减少了函数调用次数,提升了代码效率。

二、无返回值函数与None:表达“无结果”的特殊值

并非所有函数都需要返回有意义的结果。例如:打印信息的函数、写入文件的函数、修改全局变量的函数,它们的主要作用是“执行操作”而非“计算结果”。这类函数在Python中默认返回一个特殊值None,表示“无结果”或“空值”。

1. None的本质与作用

None是Python的一个内置常量,代表“空”“无”或“不存在”。它有以下特性:

  • NoneType类型的唯一实例(type(None) → NoneType)。
  • 与任何值比较(除自身外)都返回FalseNone == 0 → FalseNone == "" → False)。
  • 常用于表示“函数无有效结果”“变量未初始化”或“可选参数未提供”。

2. 无return语句的函数:默认返回None

如果函数没有return语句,或return后没有值,调用后会默认返回None

示例2:无返回值函数的返回值

def print_greeting():"""打印问候语,无返回值"""print("Hello, Welcome!")# 调用函数并接收返回值
result = print_greeting()
print(f"函数返回值:{result}")        # 输出:None
print(f"返回值类型:{type(result)}")  # 输出:<class 'NoneType'>

解析

  • 函数print_greeting的功能是打印信息,没有return语句,因此调用后返回None
  • 变量result接收None,这表明函数完成了操作但没有产生可供后续使用的结果。

3. 显式返回None:明确表达“无有效结果”

有时需要在函数中显式返回None,明确告知调用者“操作失败”或“无结果”(如参数无效时)。这比隐式返回None更具可读性。

示例3:显式返回None表示无效操作

def divide(a, b):"""计算a除以b的结果,b为0时返回None"""if b == 0:print("错误:除数不能为0")return None  # 显式返回None表示失败return a / b# 正常情况:返回有效结果
print(divide(10, 2))  # 输出:5.0# 异常情况:返回None
print(divide(5, 0))   # 输出:None

解析

  • b=0时,除法无意义,函数通过return None明确表示“操作失败,无有效结果”。
  • 调用者可通过判断返回值是否为None来处理异常情况(如result = divide(a, b); if result is not None: ...)。

4. 常见误区:混淆“无返回值”与“返回空值”

初学者常将“返回空列表[]”“返回空字符串""”与“返回None”混淆,实际上它们有本质区别:

  • return []:返回一个空列表(有具体类型和值),表示“结果存在但为空”。
  • return None:返回None,表示“没有结果”或“操作失败”。

示例4:对比None与空值

def get_empty_list():return []  # 返回空列表def get_none():return None  # 返回Noneprint(get_empty_list() is None)  # 输出:False(空列表不是None)
print(get_empty_list() == [])    # 输出:True(是空列表)
print(get_none() is None)        # 输出:True(确实是None)

最佳实践

  • 当函数逻辑上应该有结果但结果为空时(如查询数据库未找到记录),返回空列表/字典。
  • 当函数因参数错误、操作无法完成等原因“没有结果”时,返回None

三、函数嵌套调用:函数间的协作与流程控制

函数嵌套调用指的是“在一个函数的内部调用另一个函数”,这是构建复杂逻辑的基础。通过嵌套调用,我们可以将大问题分解为多个小问题,每个函数专注于解决一个子问题,最终通过函数间的协作完成整体任务。

1. 嵌套调用的执行流程

函数嵌套调用时,程序的执行流程会发生多次跳转:

  1. 主程序调用函数A,暂停主程序执行,进入函数A。
  2. 函数A内部调用函数B,暂停函数A执行,进入函数B。
  3. 函数B执行完毕,返回结果给函数A,继续执行函数A中调用B之后的代码。
  4. 函数A执行完毕,返回结果给主程序,继续执行主程序中调用A之后的代码。

示例5:嵌套调用的执行流程演示

def add(a, b):"""计算a与b的和"""print(f"正在计算{ a } + { b }")return a + bdef square(num):"""计算num的平方"""print(f"正在计算{ num }的平方")return num **2def add_and_square(a, b):"""先调用add求a+b,再调用square求平方"""sum_ab = add(a, b)  # 嵌套调用add函数result = square(sum_ab)  # 嵌套调用square函数return result# 主程序调用add_and_square
final_result = add_and_square(3, 4)
print(f"最终结果:{final_result}")

执行流程与输出

正在计算3 + 4          # add函数执行
正在计算7的平方        # square函数执行
最终结果:49           # 主程序输出

解析

  • 主程序调用add_and_square(3,4),程序进入该函数。
  • add_and_square中先调用add(3,4),程序跳转至add函数,计算并返回7。
  • add_and_square接收7后,调用square(7),程序跳转至square函数,计算并返回49。
  • add_and_square返回49给主程序,主程序打印最终结果。

这种“层层调用”的流程让代码逻辑清晰,每个函数专注于单一功能,符合“模块化”和“单一职责”原则。

2. 嵌套调用的优势与适用场景

嵌套调用的核心优势在于代码复用和逻辑分解

  • 代码复用:将常用功能封装为函数(如addsquare),在多个地方嵌套调用,避免重复编码。
  • 逻辑分解:将复杂任务(如“先求和再平方”)分解为多个简单步骤,每个步骤用函数实现,降低思维复杂度。

适用场景:

  • 数据处理流水线:如“读取数据→清洗数据→分析数据→生成报告”,每个步骤用函数实现,依次嵌套调用。
  • 参数预处理:函数接收原始参数后,调用其他函数进行验证、转换,再处理。
  • 条件分支调用:根据不同条件调用不同函数(如if x > 0: call funcA() else: call funcB())。

3. 实战案例:数据处理流水线

假设需要实现一个“数据处理流水线”,功能为:接收原始数据→过滤无效值→计算平均值→格式化输出结果。通过嵌套调用将每个步骤封装为函数,使流程清晰可维护。

案例代码实现

def filter_invalid(data):"""过滤数据中的非数字和负数"""valid_data = []for item in data:if isinstance(item, (int, float)) and item >= 0:valid_data.append(item)else:print(f"过滤无效值:{item}")return valid_datadef calculate_average(data):"""计算数据的平均值(调用filter_invalid预处理)"""if not data:print("数据为空,无法计算平均值")return None# 嵌套调用:先过滤再计算valid_data = filter_invalid(data)if not valid_data:print("无有效数据,无法计算平均值")return Nonereturn sum(valid_data) / len(valid_data)def format_result(average):"""格式化平均值为字符串(保留2位小数)"""if average is None:return "计算失败"return f"平均值:{average:.2f}"def data_pipeline(raw_data):"""数据处理主函数(嵌套调用其他函数)"""avg = calculate_average(raw_data)  # 调用计算平均值函数report = format_result(avg)        # 调用格式化函数return report# 测试数据
test_data = [10, 20, -5, "30", 25.5, None]# 执行流水线
result = data_pipeline(test_data)
print(result)  # 输出:平均值:18.83

解析

  • 整个流程被分解为4个函数,每个函数专注于单一任务:
    • filter_invalid:过滤非数字和负数。
    • calculate_average:嵌套调用filter_invalid,基于有效数据计算平均值。
    • format_result:将平均值格式化为字符串(处理None情况)。
    • data_pipeline:作为主函数,依次调用calculate_averageformat_result,完成整个流程。
  • 嵌套调用让代码逻辑清晰,若需要修改某一步骤(如调整过滤规则),只需修改对应的函数,无需改动其他部分,可维护性大幅提升。

四、综合案例:学生成绩分析系统

结合多返回值、None处理和嵌套调用,实现一个“学生成绩分析系统”,功能包括:

  1. 录入学生成绩(处理无效输入,返回None)。
  2. 分析成绩(返回最高分、最低分、平均分)。
  3. 生成分析报告(嵌套调用分析函数,格式化结果)。

案例代码实现

def input_grades():"""录入学生成绩,支持多次输入,输入'q'结束返回:有效成绩列表(若无可返回None)"""grades = []while True:user_input = input("请输入成绩(输入'q'结束):")if user_input.lower() == 'q':break# 验证输入是否为有效成绩(0-100的数字)try:grade = float(user_input)if 0 <= grade <= 100:grades.append(grade)else:print("成绩必须在0-100之间,请重新输入")except ValueError:print("输入无效,请输入数字或'q'")return grades if grades else None  # 无有效成绩返回Nonedef analyze_grades(grades):"""分析成绩,返回最高分、最低分、平均分参数:grades(有效成绩列表)返回:(最高分, 最低分, 平均分)或None(输入无效时)"""if not grades:return Nonehighest = max(grades)lowest = min(grades)average = sum(grades) / len(grades)return highest, lowest, average  # 多返回值def generate_report():"""生成成绩分析报告(嵌套调用其他函数)"""print("===== 学生成绩分析系统 =====")grades = input_grades()  # 嵌套调用:录入成绩if grades is None:return "未录入有效成绩,无法生成报告"# 嵌套调用:分析成绩(多返回值)highest, lowest, average = analyze_grades(grades)# 格式化报告report = (f"\n===== 成绩分析报告 =====\n"f"参与人数:{len(grades)}\n"f"最高分:{highest:.1f}\n"f"最低分:{lowest:.1f}\n"f"平均分:{average:.1f}\n"f"======================")return report# 运行系统
print(generate_report())

案例解析

  • 多返回值应用analyze_grades函数一次返回最高分、最低分、平均分,调用者通过三个变量接收,便于后续处理。
  • None处理input_grades在无有效成绩时返回Nonegenerate_report通过判断grades is None处理空数据场景,避免报错。
  • 嵌套调用generate_report作为主函数,依次嵌套调用input_grades(录入)和analyze_grades(分析),将多个步骤串联成完整流程,逻辑清晰。

该案例展示了返回值特性如何协同工作:多返回值减少数据传递次数,None处理异常情况,嵌套调用实现流程整合,共同构建出健壮、易维护的系统。

五、总结与提升

函数返回值是连接函数与外部的桥梁,其特性直接影响函数的灵活性和协作能力:

  • 多返回值:本质是返回元组,通过变量解包实现“一次接收多个结果”,适合返回相关联的多个值(如周长和面积)。
  • None:表示“无结果”或“操作失败”,是函数与调用者传递状态的重要方式,需注意与空值(如[])的区别。
  • 嵌套调用:允许函数内部调用其他函数,通过分解复杂任务提升代码复用性和可读性,是构建模块化程序的核心技巧。

进阶练习

  1. 实现一个split_name函数,接收全名(如“张三”“李四 三”),返回(last_name, first_name)( lastName为姓,first_name为名,无名为空字符串)。
  2. 编写一个嵌套调用的函数process_text,流程为:接收原始字符串→调用clean_text(去除标点)→调用count_words(统计单词数)→返回统计结果。
  3. 改进rectangle_info函数,使其能接收“长和宽”或“正方形边长”(通过参数默认值实现),返回周长和面积,无效输入返回None

通过这些练习,你将能更深入地理解返回值设计对函数协作的影响,写出更简洁、更健壮的代码。记住:** 优秀的函数返回值设计,能让函数像乐高积木一样,轻松组合出复杂功能**。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/922196.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/922196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python使用pip安装的包与卸载

1&#xff1a;基本卸载命令 # 卸载单个包 pip uninstall package_name# 示例&#xff1a;卸载requests包 pip uninstall requests2&#xff1a;卸载多个包 # 一次性卸载多个包 pip uninstall package1 package2 package3# 示例 pip uninstall requests numpy pandas3&#xff1…

超级流水线和标量流水线的原理

一、什么是流水线&#xff1f;要理解这两个概念&#xff0c;首先要明白流水线&#xff08;Pipelining&#xff09; 的基本思想。想象一个汽车装配工厂&#xff1a;* 没有流水线&#xff1a;一个工人负责组装一整辆汽车&#xff0c;装完一辆再装下一辆。效率很低。* 有了流水线&…

【Ansible】管理复杂的Play和Playbook知识点

1.什么是主机模式&#xff1f;答&#xff1a;主机模式是Ansible中用于从Inventory中筛选目标主机的规则&#xff0c;通过灵活的模式定义可精准定位需要执行任务的主机。2.主机模式的作用答&#xff1a;筛选目标&#xff1a;从主机清单中选择一个或多个主机/组&#xff0c;作为P…

FastGPT源码解析 Agent 智能体应用创建流程和代码分析

FastGPT对话智能体创建流程和代码分析 平台作为agent平台&#xff0c;平台所有功能都是围绕Agent创建和使用为核心的。平台整合各种基础能力&#xff0c;如大模型、知识库、工作流、插件等模块&#xff0c;通过可视化&#xff0c;在界面上创建智能体&#xff0c;使用全部基础能…

缺失数据处理全指南:方法、案例与最佳实践

如何处理缺失数据&#xff1a;方法、案例与最佳实践 1. 引言 在数据分析和机器学习中&#xff0c;缺失数据是一个普遍存在的问题。如何处理缺失值&#xff0c;往往直接影响到后续分析和建模的效果。处理不当&#xff0c;不仅会浪费数据&#xff0c;还可能导致模型预测结果的不准…

为什么Cesium不使用vue或者react,而是 保留 Knockout

1. Knockout-ES5 插件的语法简化优势 自动深度监听&#xff1a;Cesium 通过集成 Knockout-ES5 插件&#xff0c;允许开发者直接使用普通变量语法&#xff08;如 viewModel.property newValue&#xff09;替代繁琐的 observable() 包装&#xff0c;无需手动声明每个可观察属性。…

Word怎么设置页码总页数不包含封面和目录页

有时候使用页码格式是[第x页/共x页]或[x/x]时会遇到word总页数和实际想要的页数不一致&#xff0c;导致显示不统一&#xff0c;这里介绍一个简单的办法&#xff0c;适用于比较简单的情况。 一、wps版本 文章分节 首先将目录页与正文页进行分节&#xff1a;在目录页后面选择插入…

突破机器人通讯架构瓶颈,CAN/FD、高速485、EtherCAT,哪种总线才是最优解?

引言&#xff1a; 从协作机械臂到人形机器人&#xff0c;一文拆解主流总线技术选型困局 在机器人技术飞速发展的今天&#xff0c;从工厂流水线上的协作机械臂到科技展会上的人形机器人&#xff0c;它们的“神经系统”——通讯总线&#xff0c;正面临着前所未有的挑战。特斯拉O…

Java核心概念详解:JVM、JRE、JDK、Java SE、Java EE (Jakarta EE)

1. Java是什么&#xff1f; Java首先是一种编程语言。它拥有特定的语法、关键字和结构&#xff0c;开发者可以用它来编写指令&#xff0c;让计算机执行任务。核心特点&#xff1a; Java最著名的特点是“一次编写&#xff0c;到处运行”&#xff08;Write Once, Run Anywhere - …

OSPF高级技术 相关知识点

1.多区域OSPFospf 设计多区域原因&#xff1a;① 每个区域的路由器只需同步自己所在区域的链路状态数据库&#xff0c;分区域设 计可以使得每个区域的链路状态数据库得以减少。以降低路由器cpu、内存 的消耗。② 避免某区域内的网络故障&#xff08;例如&#xff1a;接口频繁up…

Linux / Windows 下连续发送多帧 8 字节指令,下位机只响应第一帧,第二帧“丢失”。

串口编程易错点笔记 基于 serial::Serial&#xff08;wjwwood serial 库&#xff09; 场景&#xff1a;Linux / Windows 下连续发送多帧 8 字节指令&#xff0c;下位机只响应第一帧&#xff0c;第二帧“丢失”。1. 现象 serial::Serial ser("/dev/ttyUSB0", 115200);…

三十九、案例-配置文件-参数配置化(了解即可,现在主流使用yml配置文件)

参数配置化-问题引出参数配置化-问题解决参数配置化-代码与过程解析代码&#xff1a; AliOSSUtils&#xff08;工具类&#xff09; package com.itheima.utils;import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import org.springframework.beans.factory.…

Linux之virtio实现原理--pci 基础

一、概述 virtio设备可以基于不同总线来实现&#xff0c;本文介绍基于pci实现的virtio-pci设备。以virtio-blk为例&#xff0c;首先介绍PCI配置空间内容&#xff0c;virtio-pci实现的硬件基础——capability&#xff0c;最后分析PIC设备的初始化以及virtio-pci设备的初始化。 …

Claude-Flow AI协同开发:从“CTO”到“人机共生体”的AI协同开发

6.1 思维的终极融合&#xff1a;从“CTO”到“人机共生体” (Human-AI Symbiote) 在之前的章节中&#xff0c;我们逐步将您的角色从“开发者”提升为“项目经理”&#xff0c;最终定位为整个“人机混合团队的CTO”。这个模型强调的是一种 “指挥-控制” (Command-and-Control) …

TCGA单癌肿按单基因高低分组的转录组差异热图分析作图教程

TCGA单癌肿按单基因高低分组的转录组差异热图分析作图教程分析作图原理过程提取出TCGA中指定的单基因单癌肿的转录组表达数据对该单基因的表达水平的中位数作为阈值把样本分成高表达组和低表达组按该基因的高低表达样本分组来做该癌症的转录组差异分析对差异分析结果中top差异高…

手搓Tomcat

目录 Tomcat是什么&#xff1f; 前置工作准备 构建并启动Tomcat 处理Socket逻辑顺序 获取输入流并读取数据封装到Request 自定义Servlet对象 暂存响应体 按Http协议发送响应数据 部署Tomcat ​ Tomcat是什么&#xff1f; Tomcat 是一个 Web 应用服务器&#xff08;准确…

Linux网络:初识网络

文章目录1. 网络发展1.1 独立模式1.2 网络互联1.3 局域网LAN1.4 广域网WAN2. 认识 “协议”2.1 什么是协议&#xff1f;2.2 为什么要有协议&#xff1f;2.3 深入了解协议序&#xff1a;开网络之篇章&#xff0c;建网络之基础&#xff0c;将近2月过去&#xff0c;暑假期间不曾有…

文件检查与拷贝-简化版

本篇继续来学习shell脚本&#xff0c;对上一篇的文件检查与拷贝脚本进行简化修改。 1 功能说明 在Linux系统中&#xff0c;通过一个shell脚本&#xff0c;实现将一个目录中的所有文件&#xff08;包括子目录中的&#xff09;&#xff0c;拷贝到顶一个指定的目录&#xff0c;要求…

DCA1000 AWR1843 环境安装

mmWaveStudio GUI设计用于表征和评估TI Radar器械。mmWaveStudio通过SPI向mmWave设备发送命令来配置和控制mmWave设备。使用DCA 1000 EVM或TSW 1400 EVM板捕获ADC数据&#xff0c;并在Matlab中处理数据&#xff0c;结果显示在GUI中。mmWaveStudio GUI利用C DLL和一组API通过FTD…

机器学习实操项目01——Numpy入门(基本操作、数组形状操作、复制与试图、多种索引技巧、线性代数)

上一章&#xff1a;【从 0 到 1 落地】机器学习实操项目目录&#xff1a;覆盖入门到进阶&#xff0c;大学生就业 / 竞赛必备 下一章&#xff1a; 机器学习核心知识点目录&#xff1a;机器学习核心知识点目录 机器学习实战项目&#xff1a;【从 0 到 1 落地】机器学习实操项目目…