Python入门笔记(三)
文章目录
- 第八章 字典dict
- 8.1 创建字典:{}、dict()、字典生成式、zip()
- 8.2 获取键对应的值:get()
- 8.3 in, not in判断键是否在字典中
- 8.4 增加键值对:fromkeys()、setdefault()、update()
- 8.5 删除键值对:del语句、clear()、pop()、popitem()
- 8.6 遍历键、值、键值对:keys()、values()、items()
- 8.7 字典、列表相互嵌套
- 8.8 字典中索引键对应的值:.index()
- 8.9 备份字典:copy()
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。
点击跳转:人工智能从入门到精通教程
本文电子版获取方式:
「Python入门笔记(三).pdf」,复制整段内容,打开最新版「夸克APP」即可获取。
链接:https://pan.quark.cn/s/93216671fe07
第八章 字典dict
和list比较,dict有以下几个特点:
- 查找和插入的速度极快,不会随着key的增加而变慢;
- 需要占用大量的内存,内存浪费多。
而list相反:
- 查找和插入的时间随着元素的增加而增加;
- 占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。
- 字典是无序的,是可变序列
- 用花括号括起来
- 字典是一系列的键-值对(key-value),值可以是数字、字符串、列表乃至字典。
- 字典是一种动态结构,可随时在其中添加键-值对。要添加键-值对,可依次指定字典名、用方括号括起来键和相关联的值
- dict的key必须是不可变对象。
- 键不可重复,值可以重复
8.1 创建字典:{}、dict()、字典生成式、zip()
- 花括号
- 使用内置函数dict()
- 字典生成式
dict()
例1:
dict1 = dict(name='zdb', age='1')
print(dict1)
{'name': 'zdb', 'age': '1'}
例2
a = (('F',70),('i',105),('s',115),('h',104),('C',67))
print(type(a))dict3 = dict((('F',70),('i',105),('s',115),('h',104),('C',67))) #元组转换字典
print(dict3)
<class 'tuple'>
{'F': 70, 'i': 105, 's': 115, 'h': 104, 'C': 67}
创建空字典
print(dict())
{}
字典生成式
公式: d = {item: price for item, price in zip(items, prices)}
例
items = ['Fruits', 'Books', 'Others']
prices = [96, 78, 85, 100]d = {item: price for item, price in zip(items, prices)}
print(d)
{'Fruits': 96, 'Books': 78, 'Others': 85}
zip():将两个列表对应位置的值括起来
list1=[3,2,1,6,5,4,9,9,9]
list2=[1,2,3,4,5,6]
print(zip(list1,list2))
print(list(zip(list1,list2)))
<zip object at 0x000001C3AF8CCB88>
[(3, 1), (2, 2), (1, 3), (6, 4), (5, 5), (4, 6)]
8.2 获取键对应的值:get()
1. 通过访问键得到值
例1
alien_0 = {'color':'green', 'points':5}
print(alien_0['color']) #输出color对应的值
print(alien_0['points'])
green
5
例2
scores = {'张三':100, '李四':98, '王二':45}
print(scores['张三'])
100
.get()
- 1.字典中有这个键则输出值
- 2.字典没有这个键则输出none
- 3.可以自定义没有这个键时输出的内容
例1
scores = {'张三':100, '李四':98, '王二':45}
print(scores.get('张三'))
print(scores.get('麻子'))
print(scores.get('麻子', '没有'))
100
None
没有
8.3 in, not in判断键是否在字典中
scores = {'张三':100, '李四':98, '王二':45}
print('张三' in scores)
print('麻子' not in scores)
True
True
8.4 增加键值对:fromkeys()、setdefault()、update()
1.直接增加键值对
例1:添加两个键
alien_0 = {'color':'green', 'points':5}
print(alien_0)alien_0['x_position'] = 0 #添加键-值对
alien_0['y_position'] = 25
print(alien_0)
{'color': 'green', 'points': 5}
{'color': 'green', 'points': 5, 'x_position': 0, 'y_position': 25}
例2:添加键和值
- 给字典中没有的键赋予值就是添加键值对
- 给字典中有的键赋予新值就是修改键所对应的值
dict4 = dict(name='zdb', 性别='男')
print(dict4)dict4['name'] = 'zz'
print(dict4)dict4['民族'] = '汉'
print(dict4)
{'name': 'zdb', '性别': '男'}
{'name': 'zz', '性别': '男'}
{'name': 'zz', '性别': '男', '民族': '汉'}
例3. 空字典中添加键-值对
alien_0 = {}alien_0['color'] = 'green'
alien_0['prints'] = 5
print(alien_0)
{'color': 'green', 'prints': 5}
2.fromkeys(): 创建键-值对
例1
dict1 = dict.fromkeys(range(5),'zdb')
print(dict1)
{0: 'zdb', 1: 'zdb', 2: 'zdb', 3: 'zdb', 4: 'zdb'}
例2
dict1 = {}
print(dict1.fromkeys((1,2,3)))
print(dict1.fromkeys((1,2,3),'number')) #三个键对应的值一样
print(dict1.fromkeys((1,2,3),('one','two','three')))
print(dict1.fromkeys((1,3),'数字'))
{1: None, 2: None, 3: None}
{1: 'number', 2: 'number', 3: 'number'}
{1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')}
{1: '数字', 3: '数字'}
3.setdefault():添加键和值
a = {1:'one',2:'two',3:'three',4:'four'} #字典没有顺序
a.setdefault('小白') #添加键
print(a)a.setdefault(5,'five') #添加键和值
print(a)
{1: 'one', 2: 'two', 3: 'three', 4: 'four', '小白': None}
{1: 'one', 2: 'two', 3: 'three', 4: 'four', '小白': None, 5: 'five'}
4.update():用字典A更新字典B的键值对
a = {1:'one',2:'two',3:'three',4:'four'} # 字典没有顺序
b = {'小白':'狗'}
a.update(b) # 用b更新a
print(a)
{1: 'one', 2: 'two', 3: 'three', 4: 'four', '小白': '狗'}
8.5 删除键值对:del语句、clear()、pop()、popitem()
1.del:永久性删除,删除指定的键值对
例:
alien_0 = {'color':'green', 'points':5}
print(alien_0)del alien_0['points'] #删除键
print(alien_0)
{'color': 'green', 'points': 5}
{'color': 'green'}
2、.clear():清空字典,永久的,清空后为空字典
dict1 = dict.fromkeys(range(5),'zdb')
print(dict1)
dict1.clear()
print(dict1)
{0: 'zdb', 1: 'zdb', 2: 'zdb', 3: 'zdb', 4: 'zdb'}
{}
3. pop():删除键值对,永久的
a = {'a':'one', 'b':'two', 'c':'three', 'd':'four'} #字典没有顺序
a.pop('b')
print(a)
{'a': 'one', 'c': 'three', 'd': 'four'}
4.popitem():删除最后一个键值对,永久的
a = {1:'one',2:'two',3:'three',4:'four'} #字典没有顺序
print(a.popitem()) #输出最后一个
print(a)
(4, 'four')
{1: 'one', 2: 'two', 3: 'three'}
8.6 遍历键、值、键值对:keys()、values()、items()
1. 遍历键
方法一
scores = {'张三': 100, '李四': 98, '王二': 45}
for i in scores:print(i)
张三
李四
王二
方法二:keys()
favorite_language = {'jen':'python','sarah':'c','edward':'ruby','phil':'python'}for name in favorite_language.keys(): #两个变量随便取名 print(name.title())
Jen
Sarah
Edward
Phil
例2
favorite_language = {'jen':'python','sarah':'c','edward':'ruby','phil':'python'}friends = ['phil', 'sarah']
for name in favorite_language.keys(): #遍历键print(name.title())if name in friends:print("我朋友" + name.title() + "最喜欢的语言是:" +favorite_language[name].title() + '!')
Jen
Sarah
我朋友Sarah最喜欢的语言是:C!
Edward
Phil
我朋友Phil最喜欢的语言是:Python!
例3
scores = {'张三': 100, '李四': 98, '王二': 45}
keys = scores.keys()
print(list(keys))
['张三', '李四', '王二']
2.遍历值
方法一
scores = {'张三': 100, '李四': 98, '王二': 45}
for i in scores:print(scores[i])
100
98
45
方法二
scores = {'张三': 100, '李四': 98, '王二': 45}
for i in scores:print(scores.get(i))
方法三 :.values()
favorite_language = {'jen':'python','sarah':'c','edward':'ruby','phil':'python'}print('以下语言被提到过:')
for language in favorite_language.values(): #遍历所有的值print(language.title())
以下语言被提到过:
Python
C
Ruby
Python
3. 遍历键值对
方法一
scores = {'张三': 100, '李四': 98, '王二': 45}
for i in scores:print(i, scores[i], scores.get(i))
张三 100 100
李四 98 98
王二 45 45
方法二:.items():遍历所有的键-值对
例1:
user_0 = {'姓名': 'zdb','姓': 'z','名': 'db',}
for key, value in user_0.items(): # 两个变量随便取名print('Key:' + key) # 拼接输出print('Value: ' + value)
Key:姓名
Value: zdb
Key:姓
Value: z
Key:名
Value: db
例2
favorite_language = {'jen': 'python','sarah': 'c','edward': 'ruby','phil':' python'}for name, language in favorite_language.items(): #两个变量随便取名print(name.title() + "'最喜欢的语言是:" +language.title() + '.')
Jen'最喜欢的语言是:Python.
Sarah'最喜欢的语言是:C.
Edward'最喜欢的语言是:Ruby.
Phil'最喜欢的语言是: Python.
8.7 字典、列表相互嵌套
1.在列表中存储字典:[{}, {}, {}]
alien_0 ={'color':'green', 'points':5}
alien_1 ={'color':'yellow', 'points':10}
alien_2 ={'color':'red', 'points':15}aliens = [alien_0, alien_1, alien_2] #列表中嵌套字典for alien in aliens:print(alien)
{'color': 'green', 'points': 5}
{'color': 'yellow', 'points': 10}
{'color': 'red', 'points': 15}
创建30个外星人
#创建一个用于存储外星人的空列表
aliens = []#创建30个绿色的外星人
for alien_number in range(30): #0到29,循环30下new_alien = {'color':'green', 'points':5, 'speed':'slow'}aliens.append(new_alien) #添加了30个外星人#显示当前五个外星人
for alien in aliens[:5]: #循环5下print(alien)
print('...')#显示创建了多少个外星人
print("Total number of aliens: " + str(len(aliens)))
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
...
Total number of aliens: 30
将前三个外星人修改为黄色
#创建一个用于存储外星人的空列表
aliens = []#创建30个绿色的外星人
for alien_number in range(30):new_alien = {'color':'green', 'points':5, 'speed':'slow'}aliens.append(new_alien)for alien in aliens[0:3]: #前三个if alien['color'] == 'green': #修改颜色,速度,点数alien['color'] = 'yellow'alien['speed'] = 'medium'alien['points'] = 10#显示当前五个外星人
for alien in aliens[:5]: #循环前五个print(alien)
print('...')#显示创建了多少个外星人
print("Total number of aliens: " + str(len(aliens)))
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'yellow', 'points': 10, 'speed': 'medium'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
{'color': 'green', 'points': 5, 'speed': 'slow'}
2.在字典中存储列表:{[], [], []}
例1
#存储所点披萨的信息
pizza = {'crust':'thick','toppings':['mushrooms', 'extra cheese'] #列表在字典中}#概述所点的披萨
print("You ordered a " + pizza['crust'] + "-crust pizza" +"with the following toppings:")for topping in pizza['toppings']: #遍历键topping所对应的值print('\t' + topping)
You ordered a thick-crust pizzawith the following toppings:mushroomsextra cheese
例2
favorite_languages = {'jen':['python', 'ruby'],'sarah':['c'],'edward':['ruby', 'go'],'phil':['python', 'haskell'],}for name, languages in favorite_languages.items(): #两个变量随便取名print('\n' + name.title() + "'s favorite languages are:")for language in languages:print("\t" + language.title())
Jen's favorite languages are:PythonRubySarah's favorite languages are:CEdward's favorite languages are:RubyGoPhil's favorite languages are:PythonHaskell
在字典中存储字典:{{}, {}, {}}
users = {'aeinstein':{ #字典在字典中 'first':'albert','last':'einstein','location':'princeton',},'mxurie':{'first':'marie','last':'curie','location':'paris',},}for username, user_info in users.items(): #遍历键-值对print("\nUsername: " + username) #输出字典中的字典full_name = user_info['first'] + ' ' + user_info['last']location = user_info['location']print("\tFull name: " + full_name.title())print("\tlocation: " + location.title())
Username: aeinsteinFull name: Albert Einsteinlocation: PrincetonUsername: mxurieFull name: Marie Curielocation: Paris
8.8 字典中索引键对应的值:.index()
brand = ['甲','乙','丙']
slogan = ['a','b','c']
print('甲是什么:',slogan[brand.index('甲')])
print('乙是什么:',slogan[brand.index('乙')])
print('丙是什么:',slogan[brand.index('丙')])
甲是什么: a
乙是什么: b
丙是什么: c
8.9 备份字典:copy()
改变原来的,等号=赋值的会改变,但copy()的永远不变
id()
查询ID,用来判断是否改变
例1: 不管怎么改变a, c永远不变;重新等号赋值a,不影响最初等号赋值的b
a = {'姓名':'zdb'}
b_fuzhi = a # 赋值,要变两个都变,ID相同
c_copy = a.copy() # 与a,b的ID不同
print(id(a)) # 原来的
print(id(b_fuzhi)) # 与a的一样
print(id(c_copy)) # 与a的不一样a = {} # 再次赋值改变a
print(a) # a现在是空字典
print(b_fuzhi) # 与上面的b_fuzhi相同
print(c_copy) # 与上面的c_copy相同
print(id(a)) # 跟最初始的a相比,变了
print(id(b_fuzhi)) # 与上面的b_fuzhi相同
print(id(c_copy)) # 与上面的c_copy相同
1585541151464
1585541151464
1585541151544{} #变了
{'姓名': 'zdb'} #没变
{'姓名': 'zdb'} #没变
1585541152584 #变了
1585541151464 #没变
1585541151544 #没变
例2:这里用clear清除a
不管怎么改变a,c永远不变;clear清除a,这里之前等号赋值的b也会被清除
只有重新赋值a才会变ID,用clear清除a,a前后的ID不会改变
a = {'姓名':'zdb'}
b = a # 赋值,要变两个都变,ID相同
c = a.copy() # 与a、b的ID不同
print(id(a)) # 原来的
print(id(b)) # 与a的一样
print(id(c)) # 与a的不一样a.clear() # 清除a
print(a) # 空字典
print(b) # 空字典
print(c) # 与上面的c相同,不是空的
print(id(a)) # 与最初始的a没变
print(id(b)) # 与最初始的b没变,还与a相同
print(id(c)) # 死也不变
2709389179624
2709389179624
2709389179704 #copy的内容不变{}
{} #赋值的也清除了
{'姓名': 'zdb'} #copy的没变
2709389179624
2709389179624 #与a原来的ID一直一样
2709389179704
例3:a等号赋值给b,不管是a还是b增加或减少元素,另外一个都会跟着改变,但是ID永远不变
a = {'姓名':'zdb'} #字典里面没有顺序
b = a # 等号赋值
c = a.copy() # 这里就不在举例这个了,永远不变
print(id(a)) # 原来的
print(id(b)) # 与a的相同b[2] = 'z' #b增加元素,a也会增加
print(a)
print(b)
print(id(a))
print(id(b))a[3] = '猪' #a增加元素,b也会增加
print(a)
print(b)
print(id(a))
print(id(b))a.pop(3) #删除a的键3,b跟着删除
print(a)
print(b)
print(id(a))
print(id(b))a.pop(2) #删除a的键2,b跟着删除
print(a)
print(b)
print(id(a))
print(id(b))
1734662028008
1734662028008{'姓名': 'zdb', 2: 'z'}
{'姓名': 'zdb', 2: 'z'}
1734662028008
1734662028008{'姓名': 'zdb', 2: 'z', 3: '猪'}
{'姓名': 'zdb', 2: 'z', 3: '猪'}
1734662028008
1734662028008{'姓名': 'zdb', 2: 'z'}
{'姓名': 'zdb', 2: 'z'}
1734662028008
1734662028008{'姓名': 'zdb'}
{'姓名': 'zdb'}
1734662028008
1734662028008
相关文章:
Python入门笔记(三)
文章目录 第八章 字典dict8.1 创建字典:{}、dict()、字典生成式、zip()8.2 获取键对应的值:get()8.3 in, not in判断键是否在字典中8.4 增加键值对:fromkeys()、setdefault()、update()8.5 删除键值对:del语句、clear(…...
PostgreSQL 任意命令执行漏洞(CVE-2019-9193)
记一次授权攻击通过PostgreSql弱口令拿到服务器权限的事件。 使用靶机复现攻击过程。 过程 在信息收集过程中,获取到在公网服务器上开启了5432端口,尝试进行暴破,获取到数据库名为默认postgres,密码为1 随后连接进PostgreSql …...
使用tgz包下载安装clickhouse低版本
1.下载安装包 官方下载地址:https://packages.clickhouse.com/tgz/stable 阿里云下载地址:clickhouse-tgz-stable安装包下载_开源镜像站-阿里云 共需要下载四个文件 clickhouse-common-static-20.3.10.75.tgz clickhouse-common-static-dbg-20.3.10.7…...
外包功能测试干了6个月,技术退步太明显了。。。。。
先说一下自己的情况,本科生,23年通过校招进入武汉某软件公司,干了差不多6个月的功能测试,今年中秋,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我就在一个外包企业干了6个月的功…...
动态规划和贪心算法
目录 动态规划和贪心算法 动态规划 贪心算法 两者之间的区别 动态规划和贪心算法 是两种经典的算法设计策略,它们各自具有独特的特点和适用场景。 动态规划 动态规划是一种将复杂问题分解为更简单子问题的求解方法。它特别适用于那些具有重叠子问题和最优子结构特性的问…...
python爬虫--tx动漫完整信息抓取
python爬虫--tx动漫完整信息抓取 一、采集主页信息二、采集详情页信息三、完整代码一、采集主页信息 先看一下采集到的信息,结果保存为csv文件: 打开开发者工具,找到数据接口。 使用xpath提取详情页url。 二、采集详情页信息 如上图所示,使用xpath提取详情页的标题、作…...
《使用Java做爬虫和使用python做爬虫哪个好》
使用Java做爬虫和使用python做爬虫哪个好 Java 和 Python 都是非常出色的编程语言,在爬虫领域各有其优势,具体使用哪种语言更好取决于多种因素: 一、开发效率 1. Python Python 以其简洁、易读的语法而闻名。在爬虫开发中,有许…...
如果我想开发一个APP,需要准备哪些材料呢
开发一个APP需要准备的材料相对复杂,涵盖了公司资质、技术资源、支付接口以及第三方服务等多个方面。以下是一份详细的材料清单: 一、公司资质证明 营业执照:需要提供公司的营业执照副本,用于申请企业支付、域名备案、APP上架及…...
告别论文初稿焦虑!ChatGPT让你轻松完成写作!
AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 在面对繁琐的论文写作时,很多人都会遇到无从下手的困惑,尤其是论文初稿阶段,往往需要大量的时间来组织思路和编写内容。然而,随着AI技术的发展,像…...
mongodb 数据迁移,亲测成功!
mysql进行数据迁移,最简单的不过是导出sql,然后在运行sql,数据也自然迁移过去了。 可是mongodb里,我们存储的是文件,是怎么做到的呢,当我在翻阅网上博客的时候,并没有发现有这方面的顾虑。 当…...
如何使用ssm实现疫情居家办公OA系统
TOC 10902ssm疫情居家办公OA系统 系统概述 进过系统的分析后,就开始记性系统的设计,系统设计包含总体设计和详细设计。总体设计只是一个大体的设计,经过了总体设计,我们能够划分出系统的一些东西,例如文件、文档、数…...
深入了解 MySQL 中的 JSON_CONTAINS
深入了解 MySQL 中的 JSON_CONTAINS MySQL 5.7 及更高版本引入了对 JSON 数据类型的支持,使得在数据库中存储和查询 JSON 数据成为可能。在这些新功能中,JSON_CONTAINS 函数是一个非常有用的工具,允许我们检查一个 JSON 文档是否包含特定的值…...
宝藏推荐:精选十款知识库搭建软件
当今这个信息爆炸的时代,高效地管理和利用知识成为了各行各业追求的目标。无论是企业内部的协作,还是对外提供的信息服务,一个强大的知识库都是不可或缺的。为了帮助大家更好地守护和利用知识宝藏,以下是精选的十款知识库搭建软件…...
go语言接口设计三国人物
题目 请设计一个接口Person,然后设计两个结构体实现Person接口,这两个结构体都代表三国时代的名人。Person接口中有一个方法,该方法输出一句最能代表该人物特点的话。 程序 package main import ("fmt") type Person interface …...
day-63 优质数对的总数 II
思路 nums1[i] 可以被 nums2[j] * k 整除,所以nums[i]/k的所有因子都符合条件,问题转换为遍历nums1,统计nums[i]/k的因子出现次数,然后遍历nums2,如果nums2[i]是某一个因子,将其出现次数加入答案中即可 解题过程 利用哈希表统计出…...
基于 Prometheus+Grafana+Alertmanager 搭建 K8S 云监控告警平台(附配置告警至QQ、钉钉)
文章目录 一、机器规划二、部署安装 node-exporter、prometheus、Grafana、kube-state-metrics1、创建 monitor-sa 命名空间2、安装node-exporter组件2.1、说明2.2、应用资源清单2.3、通过node-exporter采集数据 3、k8s 集群中部署 prometheus3.1、创建一个 sa 账号3.2、将 sa …...
C++ | Leetcode C++题解之第461题汉明距离
题目: 题解: class Solution { public:int hammingDistance(int x, int y) {int s x ^ y, ret 0;while (s) {s & s - 1;ret;}return ret;} };...
ElasticSearch备考 -- Update by query Reindex
一、题目 有个索引task,里面的文档长这样 现在需要添加一个字段all,这个字段的值是以下 a、b、c、d字段的值连在一起 二、思考 需要把四个字段拼接到一起,组成一个新的字段,这个就需要脚本, 这里有两种方案ÿ…...
从认识String类,到走进String类的世界
作为一个常用的数据类型,跟随小编一同进入String的学习吧,领略String的一些用法。 1. 认识 String 类 2. 了解 String 类的基本用法 3. 熟练掌握 String 类的常见操作 4. 认识字符串常量池 5. 认识 StringBuffer 和 StringBuilder 一:…...
Vue入门-指令修饰符-@keyup.enter
指令修饰符: 通过"."指明一些指令后缀,不同后缀封装了不同的处理操作 ->简化代码 ①按键修饰符 keyup.enter ->键盘回车监听 ".enter"if(e.keyenter){} //".enter"用来简化代码 demo: <!DOCTYPE…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
