当前位置: 首页 > news >正文

【ADS-1】【python基础-3】函数封装与面向对象

目录

  • 1 实战
  • 2 知识点

前言

第一阶段:Python基础夯实

  1. 基本语法与数据结构(列表、字典、集合)
  2. 函数定义面向对象编程
  3. 文件操作与异常处理
  4. 必备库:NumPy、Pandas基础操作

第二阶段:ADS领域专用库学习
​​…
第三阶段:…

学习目标

  1. 学会用函数封装代码块,提高代码的可读性和可复用性。
  2. 用类来抽象现实世界实体(如车辆、传感器),更加规范易用。

1 实战

实践任务1:体会函数封装的好处

  1. 封装:将上一篇博客更新车辆位置的代码封装成一个函数update_vehicle_position(vehicle_list)。
  2. 参数与返回值​​:编写一个函数calculate_distance(point1, point2),接收两个点的坐标(列表或元组),返回它们的欧氏距离。这可用于计算两车距离。
  3. 默认参数​​:编写一个创建车辆的函数create_vehicle(id, position, speed=0.0),速度默认为0。
# 封装
def update_vehicle_position(vehicle_list):for vehicle in vehicle_list:vehicle['position'][0] += vehicle['speed'] * 1return vehicle_list
# ceshi
car1 = {'id': 1, 'position': [1, 1], 'speed': 10}
car2 = {'id': 2, 'position': [2, 2], 'speed': 20}
car3 = {'id': 3, 'position': [3, 3], 'speed': 30}
cars = [car1, car2, car3]
res = update_vehicle_position(cars)
print(res)
[{'id': 1, 'position': [11, 1], 'speed': 10}, {'id': 2, 'position': [22, 2], 'speed': 20}, {'id': 3, 'position': [33, 3], 'speed': 30}]
# 欧氏距离:两个n维坐标的点之间的直线距离
import math
def calculate_distance(point1, point2):tmp = 0for i in range(len(point1)):tmp += (point1[i] - point2[i]) ** 2return math.sqrt(tmp)
# ceshi
p1 = [1, 2, 3]
p2 = [4, 5, 6]
res = calculate_distance(p1, p2)
print(res)
5.196152422706632
# 前面车辆的信息都是手动定义的,为了提高效率,可以抽象为一个函数
def create_vehicle(id, position, speed=0.0):return {'id': id, 'position': position, 'speed': speed}
# cheshi
car1 = create_vehicle(1, [1,1], 10)
car2 = create_vehicle(2, [2,2], 20)
car3 = create_vehicle(3, [3,3], 30)
car = [car1, car2, car3]
print(car)
[{'id': 1, 'position': [1, 1], 'speed': 10}, {'id': 2, 'position': [2, 2], 'speed': 20}, {'id': 3, 'position': [3, 3], 'speed': 30}]

实践任务2:体会变量定义+函数定义 与 定义类的属性和方法 的区别。

  1. 定义类:定义一个Vehicle类,其__init__方法初始化id、位置、速度等属性
  2. 方法:为Vehicle类添加一个update_position(self, time_delta=1.0)方法,根据时间步长更新自身位置。
  3. 实例化:创建Vehicle类的实例(对象),并调用其方法。
# 定义类
class Vehicle:def __init__(self, id, position, speed=0):self.id = idself.position = positionself.speed = speed# 添加一个方法def update_position(self, time_delta=2):self.position[0] += self.speed * time_delta
# ceshi
# 实例化
v1 = Vehicle(1, [1, 1], 10)
print(v1.id)
print(v1.position)
# 调用方法
v1.update_position()
print(v1.position)
1
[1, 1]
[21, 1]

实战项目:重构交通场景模拟

  1. 使用Car类来定义车辆,并实例化两个车。
  2. 将模拟循环(如模拟10个时间步长)也封装成一个函数run_simulation(car_list, steps)。
  3. 运行模拟,观察车辆位置变化。
class Car:def __init__(self, id, position, speed=0):self.id = idself.position = positionself.speed = speed
c1 = Car(1, [1, 1], 10)
c2 = Car(2, [2, 2], 20)def run_simulation(car_list, steps):for i in range(len(steps)):print(f'----开始第{i + 1}次模拟----')for j in range(len(car_list)):car = car_list[j]car.position[0] += car.speed * steps[j]print(f'第{j}辆车移动到了{car.position}处')# ceshi
import random
cars = [c1, c2]
steps = []
for i in range(10):steps.append(random.randint(-10, 10))
run_simulation(cars, steps)
----开始第1次模拟----
第0辆车移动到了[51, 1]处
第1辆车移动到了[2, 2]处
----开始第2次模拟----
第0辆车移动到了[101, 1]处
第1辆车移动到了[2, 2]处
----开始第3次模拟----
第0辆车移动到了[151, 1]处
第1辆车移动到了[2, 2]处
----开始第4次模拟----
第0辆车移动到了[201, 1]处
第1辆车移动到了[2, 2]处
----开始第5次模拟----
第0辆车移动到了[251, 1]处
第1辆车移动到了[2, 2]处
----开始第6次模拟----
第0辆车移动到了[301, 1]处
第1辆车移动到了[2, 2]处
----开始第7次模拟----
第0辆车移动到了[351, 1]处
第1辆车移动到了[2, 2]处
----开始第8次模拟----
第0辆车移动到了[401, 1]处
第1辆车移动到了[2, 2]处
----开始第9次模拟----
第0辆车移动到了[451, 1]处
第1辆车移动到了[2, 2]处
----开始第10次模拟----
第0辆车移动到了[501, 1]处
第1辆车移动到了[2, 2]处

2 知识点

  1. 求平方根(import math)和取随机数(import random)都得导入对应模块。
  2. 求平方根:math.sqrt()
  3. 取随机数:random.randint(-10,10),取[-10, 10]范围内的随机数
  4. 定义类:class Vehicle,类名一般首字母大写
  5. 定义类的属性可以类比于普通的定义变量
  6. 定义类的方法可以类比于普通的定义函数
  7. 只不过定义类是面向对象的思想,定义变量和函数是面向过程的思想。
http://www.dtcms.com/a/485909.html

相关文章:

  • 攻防世界-Web-baby_web
  • SQLite数据库基本操作
  • git创建分支,以及如何管理
  • Netty线程模型与Tomcat线程模型对比分析
  • STEMlab 125-14 Gen 2
  • 如何租用网站服务器寿光营销型网站建设
  • 云手机玩游戏卡顿的原因都有哪些
  • Python Web框架对比与模型部署
  • C# 实现高保真 Excel 转 PDF(无需 Office 环境)
  • cycloneV nios 华邦flash程序固化方案
  • FreeBSD-14.3基本安装过程
  • 细说Docker命令
  • 大型门户网站建设效果好吗重庆网站建设公司怎么做
  • 【Web】LilCTF2025 WP(随便看看
  • Vue3+Ts+Element Plus 权限菜单控制节点
  • PP-OCRv5 MCP服务器在海光主板的部署与实战
  • Linux 服务器NFS文件共享
  • 吃透大数据算法-算法地图(备用)
  • 前端性能优化实战:从指标到落地的全流程指南
  • 120html
  • 四川建设人才官方网站制作app需要学哪些东西专业知识
  • 二叉搜索树 --- 概念 + 模拟
  • 系统安全-主流密码加密算法BCrypt 和PBKDF2详解
  • 【具身智能】具身机器人VLA算法入门及实战(一):具身智能系统及VLA
  • 网站设计_网站建设_手机网站建设免费申请域名的网站
  • (1)认识测试
  • 2025年--Lc188--221. 最大正方形(多维动态规划,矩阵)--Java版
  • 【Redis】缓存读/写操作流程
  • 网站开发的网页模板移动网站建设价格便宜
  • Grafana 数据展示全流程指南:从安装到高级可视化实践