day 014总结

昨日回顾

迭代器

迭代器对象一定是可迭代对象,可迭代对象不一定是迭代器对象

可迭代对象

含有__iter__方法的数据类型

除了数字类型都是可迭代对象

迭代器对象

含有__iter__,__next__方法的数据类型

文件才是迭代器对象

可迭代对象加上__iter__会变成迭代器对象

迭代器对象加上__iter__方法依旧是迭代器对象

for循环原理

lt[1,2]
lt_iter=lt.__iter__()
while True:
    try:
        print(lt_iter.__next__())
    except StopIteration:
        break

三元表达式

条件成立 if 条件 else 条件不成立

列表推导式

[i for i in range(10)]

字典生成式

{i :i for i in range(10)}

zip

把多个可迭代对象一次性读取每一个可迭代对象的中的元素,拼成元组

生成器表达式

(i for i in range(10))

生成器

本质是迭代器,是自定迭代器,含有yield关键字的 函数

def ge():
    yield

yield

  1. 暂停函数
  2. 通过next取出一个yield的值
def range(start, stop, step):
    while start < stop:
        yield start
        start += step
       
for i in range(1,10,2):
    print(i)

递归

函数调用函数本身,有退出条件

count = 0
def a():
    global count
    print(count)
    
    if count == 100:
        return
    count += 1
    a()
    
a()

今日内容

# 匿名函数

匿名函数没有名字

匿名需要关键字lambda

lambda 参数:返回值

匿名函数一般不单独使用,和filter()/map()/sorted()/列表的sort()内置方法连用

salary_dict = {
    'nick': 3000,
    'jason': 100000,
    'tank': 5000,
    'sean': 2000
}

sort

salary_list = list(salary_dict.items())
salary_list.sort(key=lambda i:i[1])
print(salary_list)#[('sean', 2000), ('nick', 3000), ('tank', 5000), ('jason', 100000)]

sorted

salary_list=list(salary_dict.items())
s=sorted(salary_list,key=lambda i:i[1])
print(s)#[('sean', 2000), ('nick', 3000), ('tank', 5000), ('jason', 100000)]

max min filter

salary_list=list(salary_dict.items())
print(max(salary_list,key=lambda i:i[1]))#('jason', 100000)
print(min(salary_list,key=lambda i:i[1]))#('sean', 2000)
print(list(filter(lambda i: i[1] < 5000, salary_list)))  #[('nick', 3000), ('sean', 2000)]

不转换为列表

salary_dict = {    
    'nick': 3000,    
    'jason': 100000,    
    'tank': 5000,    
    'sean': 2000
}
#sorted
s=sorted(salary_dict,key=lambda i:salary_dict[i])
print(s)#['sean', 'nick', 'tank', 'jason']
#max
res = max(salary_dict, key=lambda name: salary_dict[name])
#min
res = min(salary_dict, key=lambda name: salary_dict[name])
#filter
res = filter(lambda item: salary_dict[item] > 3000, salary_dict)
#map
def function1(item):
    return item + 2
res = map(function1, [1, 2, 3, ])
print(res)
print(list(res))

内置函数

bytes 解码字符

res = bytes('中国', encoding='utf8')
print(res)#b'\xe4\xb8\xad\xe5\x9b\xbd'

chr/ord chr()参考ASCII码表将数字转换成对应字符;ord()将字符转换成对应数字

print(chr(97))#a
print(ord('a'))#97

divmod 取整/取余

print(divmod(10,4))#(2,2)

enumerate 带有索引的迭代(******)

lt=[1,2,3]
for i in enumerate(lt):
    print(i)
#(0, 1)
(1, 2)
(2, 3)

eval(***)把字符串的引号去掉,留下来的是什么就是什么

s='[1,2,3]'
print(eval(s))#[1,2,3]

hash 判断是否哈希

print(hash(1))#1

abs 绝对值

print(abs(-1))#1

all 可迭代对象内的元素全部为True则为True

print(all([1,2,3]))#true

any 只要一个元素为True则为True

print(any([1,0,0]))#true

bin/oct/hex 2进制 8进制 16进制

print(bin(123))
print(oct(123))
print(hex(123))

dir 列出模块的所有方法

frozenset:不可变的集合,类似于元组

s=frozenset({1,2,3})
print(s)

gloabls/locals# 列出所有全局变量/局部变量

print(globals())
print(locals())

pow

print(pow(2,2))#4

slice

s=slice(1,5,2)
lt=[1,2,3,4,5,6]
print(lt[s])#2 4

sum

print(sum([1,2,3,4,5,6]))

__import__通过字符串导入模块

time=__import__('time')
print(time.time())

异常处理

num=input('请输入数字')
dic={'a':1}
try:
    print(dic['b'])#KeyError
    1/int(num)
except Exception as e:#万能异常,只要有错误就捕捉
    print(e)#错误的描述信息
finally:#无论你报不报错,都会执行这一行
    print('finally')

try里报错之后,不运行下面的代码

异常捕捉只能捕捉逻辑错误

面向过程编程

对着过程编程

面向过程编程:一步一步(一个函数一个函数),上一个函数的输出是下一个函数的输入

优点:代码的独立性提高了,流程清晰

缺点:一个错误,让程序直接崩掉了

转载于:https://www.cnblogs.com/zqfzqf/p/11586904.html

内容概要:本文围绕可变桨叶四旋翼无人机的规范控制与点对点运动模拟展开,重点研究优化推力分配策略在翻转动作中的应用与性能比较。通过Matlab代码实现,构建了四旋翼动力学模型,并设计了多种控制算法以实现精确的姿态调整与轨迹跟踪。研究对比了不同推力分配方案在执行高机动性翻转动作时的稳定性、能耗效率与响应速度,旨在提升无人机在复杂飞行任务中的动态性能与控制精度。该仿真研究为无人机飞控系统的设计与优化提供了理论依据和技术支持。; 适合人群:具备一定自动控制理论基础和Matlab编程能力,从事无人机控制、飞行器动力学或机器人系统研究的科研人员及研究生。; 使用场景及目标:① 实现四旋翼无人机在三维空间中的精确点对点运动控制;② 对比分析不同推力分配策略在执行翻转等高难度动作时的控制效果与能耗表现,优化飞行性能;③ 为无人机自主飞行、特技飞行及复杂环境下的机动控制提供算法验证平台。; 阅读建议:此资源以Matlab仿真为核心,建议读者结合相关控制理论知识,深入理解代码实现细节,重点关注动力学建模、控制律设计与推力分配模块。在学习过程中,应动手调试参数,复现文中翻转动作的仿真结果,并尝试拓展至其他复杂飞行任务,以加深对无人机控制机理的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值