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

python基础语法--顺序结构

Python中的顺序结构主要包括流程控制语句,如 ifwhilefor 语句。这些语句允许你在程序中定义不同的执行路径,从而根据条件或循环次数来改变代码的执行流程。下面详细介绍这些语句的使用方法和示例。

if 语句

if 语句用于根据某个条件来决定是否执行一段代码。if 语句的基本语法如下:

if condition:# 如果条件为真,则执行这里的代码

此外,还可以加上 elif(else if)和 else 子句来扩展 if 语句的功能。


if 语句可以使用逻辑运算符 andornot 来组合多个条件表达式,从而实现更复杂的逻辑判断。下面详细介绍这些逻辑运算符的用法:

运算符

1. and 运算符

and 运算符用于连接两个条件表达式,只有当两个条件都为真时,整个表达式的结果才为真。

示例

expression1 and expression2

假设我们要判断一个人是否成年且是否有驾照:

age = 20
has_license = Trueif age >= 18 and has_license:print("成年且有驾照")
else:print("未成年后/或没有驾照")

在这个例子中,只有当 age >= 18has_license 都为 True 时,才会执行 print("成年且有驾照")

2. or 运算符

or 运算符用于连接两个条件表达式,只要有一个条件为真,整个表达式的结果就为真。

示例

expression1 or expression2

假设我们需要判断一个人是否符合以下任一条件:年龄大于等于18岁或有驾照:

age = 17
has_license = Trueif age >= 18 or has_license:print("符合条件")
else:print("不符合条件")

在这个例子中,只要 age >= 18has_license 中至少有一个为 True,就会执行 print("符合条件")

3. not 运算符

not 运算符用于取反一个条件表达式的结果,即如果原条件为真,则取反后为假;如果原条件为假,则取反后为真。

示例

not expression

假设我们需要判断一个人是否未成年:

age = 17if not age >= 18:print("未成年")
else:print("成年")

在这个例子中,age >= 18False,取反后为 True,因此执行 print("未成年")

综合示例

下面是一个综合示例,演示如何使用 andornot 运算符来组合多个条件表达式:

age = 17
has_license = False
is_student = True# 判断是否符合以下条件之一:成年且有驾照,或者未成年的学生
if (age >= 18 and has_license) or (age < 18 and is_student):print("符合条件")
else:print("不符合条件")

在这个例子中,我们使用了 andor 来组合多个条件:

  1. 如果 age >= 18has_license,则符合条件。
  2. 如果 age < 18is_student,则符合条件。

优先级

逻辑运算符的优先级如下:

  1. not
  2. and
  3. or

这意味着 not 的优先级最高,其次是 and,最后是 or。如果需要改变优先级,可以使用括号 () 来明确表达式的顺序。

示例

age = 20
has_license = False
is_student = Trueif (age >= 18 and not has_license) or is_student:print("符合条件")
else:print("不符合条件")

在这个例子中,not has_license 的优先级高于 and 运算符,因此先计算 not has_license

总结

使用 andornot 运算符可以组合多个条件表达式,从而实现更复杂的逻辑判断。这些逻辑运算符的合理使用可以使你的代码更加清晰和高效。

  • and:所有条件都为真时,整个表达式为真。
  • or:只要有一个条件为真,整个表达式为真。
  • not:取反条件表达式的结果。

示例代码

常见用法

x = 10if x > 0:print("x 是正数")
elif x == 0:print("x 是零")
else:print("x 是负数")

直接将结果赋值给一个变量

在这里插入图片描述

在一个条件表达式内可以嵌套另一个条件表达式

a = 6
b = 8
print('a大于b' if a > b else ('a小于b' if a < b else 'a等于b'))
# a小于b

题目

关于条件表达式的一些题目:
在这里插入图片描述

对于A选项:

在这里插入图片描述

在Python中,if语句通常后面可以跟着elifelse if)和else来构成完整的条件语句。在这种情况下,else应该跟在if语句的后面,而不是在其中间,作为另一个条件分支的开始。所以这个选项是错误的。

正确的语法应该是:

if x < y:print('foo')
else:print('bar')

在这个语法中,如果 x 小于 y,则打印 'foo',否则打印 'bar'。这样,每个分支都有清晰的开始和结束,遵循了Python语法的规定。

对于D选项:

这个Python语句是一个简单的条件语句,用于比较两个变量xy的大小关系。如果x小于y,则会执行冒号后面的代码块,否则不执行。让我们逐步解析这个语句:

  1. if x < y:这是一个条件语句的开始,检查条件是否成立。条件是 x < y,如果x小于y,则条件成立,执行接下来的代码块。

  2. print('foo');print('bac');print('baz'):这是条件成立时执行的代码块。它包含三个独立的打印语句,每个语句后面都有一个分号。这表示这三个打印语句是一行内的连续语句,不需要使用缩进或换行符来分隔。在条件成立时,将按顺序执行这三个打印语句。

综上所述,如果变量x小于变量y,则会依次打印 'foo''bac''baz',否则不执行任何操作。


在这里插入图片描述


在这里插入图片描述

while 循环

while 循环用于在满足某个条件时重复执行一段代码。while 循环的基本语法如下:

while condition:# 如果条件为真,则执行这里的代码

需要注意的是,在 while 循环中,必须确保循环条件最终会变为假,否则会导致无限循环。

示例代码

count = 0
while count < 5:print("Count:", count)count += 1

题目

在这里插入图片描述

def avg_input():total = 0count = 0while True:x = input()if x == '':  # 如果输入为空字符串,则结束循环breaktotal += float(x)count += 1if count == 0:return 'N/A'else:return round(total / count, 1)print(avg_input())

for 循环

for 循环用于遍历序列(如列表、元组、字符串等)中的元素。for 循环的基本语法如下:

for variable in iterable:# 对于 iterable 中的每个元素,执行这里的代码

for 循环也可以使用 range() 函数来生成一系列数字。

示例代码

# 遍历列表
numbers = [1, 2, 3, 4, 5]
for number in numbers:print(number)# 使用 range() 生成数字序列
for i in range(5):print(i)
  1. 如果循环体内不需要使用自定义的变量,可以将自定义对象替换为 _ ;

  2. for - in 循环语句通常用来遍历 range、列表、元组、字符串等序列;

# 使用range返回值作为迭代对象for number in range(1, 4):print(number)# 不需要使用自定义变量,用_替代
for _ in range(1, 4):   # 打印三次 helloprint('hello')# 遍历字典, 变量返回的是key值
d = { 'Fruits':86, 'Books':83, 'Videos':2 }
for elem in d:print(elem)
# 遍历字典,返回value值
for value in d.values():print(value)
# 遍历字典,返回key,value值
for key, value in d.items():print(key, '->', value)
  1. 如果想要在循环的过程更改序列的内容,最好使用序列的切片作为迭代对象;
worlds = ['Java', 'Python', 'C++', 'MySql']
# 将长度大于3的字符串移除
for world in worlds[:]:if len(world) > 3:worlds.remove(world)
print(worlds)
  1. 如果在遍历序列的过程中需要访问元素的索引,有以下几种实现方式:
L = ['Java','Python','Swift','Kotlin']# 第1种实现方式
index = 0
for item in L:print('L[{}] = {}'.format(index,item))index += 1# 第2种实现方式
for index in range(len(L)):print('L[{}] = {}'.format(index,L[index]))# 第3种方法
index = 0
while index < len(L):print('L[{}] = {}'.format(index, L[index])index += 1# 第4种方法
# 可以调用内置函数enumerate(类enumerate的构造方法)将要遍历的序列转换为enumerate对象。
print(enumerate(L))    # <enumerate object at 0x103b03a20>print(list(enumerate(L)))
# [(0,Java'),(1,'Python'),(2,'Swift'),(3,'Kotlin')]
# 还可以指定索引的起始值
print(list(enumerate(L, 1))
# [(1,Java'),(2,'Python'),(3,'Swift'),(4,'Kotlin')]for index, item in list(enumerate(L)):print('L[{}] = {}'.format(index,item))   
# 或者
for index, item in enumerate(L):print('L[{}] = {}'.format(index,item))
  1. 并行遍历–>同时遍历多个可迭代对象

例如:列表names中存放姓名,列表ages中存放对应的年龄。如果想同时遍历这两个列表,打印出所有的姓名及对应的年龄,可以这样实现:
实现一:

names = ['Jack', 'Mike', 'Tom']
ages = [16, 32, 43]
for i in range(len(names)):print(names[i],'的年龄是:', ages[i])

实现二:

如果需要同时遍历多个可迭代对象,可以调用内置函数zip(类zi的构造方法)将多个可迭代对象打包压缩成zip对象:

names = ['Jack', 'Mike', 'Tom']
ages = [16, 32, 43]
print(list(zip(names, ages)))
# [('Jack', 16), ('Mike', 32), ('Tom', 43)]

或:

for name, age in zip(names, ages):print(name, '->', age)
# Jack -> 16
# Mike -> 32
# Tom -> 43

可以使用 * 进行解压操作:

names = ['Jack', 'Mike', 'Tom']
ages = [16, 32, 43]
a = list(zip(names, ages))  # 将zip对象转换为列表
print(a)  # [('Jack', 16), ('Mike', 32), ('Tom', 43)]x, y = zip(*a)  # 直接使用zip结果解压
print(list(x))  # ['Jack', 'Mike', 'Tom']
print(list(y))  # [16, 32, 43]

错误示例:

names = ['Jack', 'Mike', 'Tom']
ages = [16, 32, 43]
a = zip(names, ages) # a此时是一个zip对象
print(list(a)) # [('Jack', 16), ('Mike', 32), ('Tom', 43)]
# 内容被清空了
x, y= zip(*a)
print(list(x))
print(list(y))

运行报错:
在这里插入图片描述
问题出在 zip 函数的使用上。在代码中,当执行 print(list(a)) 后,a 已经被消耗完了。这是因为 zip 函数是一个迭代器,一旦被迭代完,它的内容就会被清空。

因此,当你尝试解压 a 的时候,a 已经为空,导致解压失败。

题目

在这里插入图片描述
这段代码意图是将列表 x 中的每个字符串转换为大写,但实际上它并没有起到预期的作用。

原因在于 upper() 方法并不会修改原字符串,而是返回一个新的字符串,该字符串是原字符串的大写版本。因此,在你的代码中,调用 i.upper() 并没有对原列表 x 中的字符串进行修改,而是返回了大写版本的字符串,但并没有进行任何操作。正确写法,如下:

# 方法一:使用列表推导式
x = [i.upper() for i in x]
print(x)  # ['AB', 'CD']# 方法二:修改原列表
for i in range(len(x)):x[i] = x[i].upper()
print(x)  # ['AB', 'CD']

在这里插入图片描述


在这里插入图片描述

  1. for 循环中,我们遍历列表 a 中的每一个元素。循环的迭代器是 a[-1],即列表 a 中的最后一个元素。
  2. 在每一次迭代中,我们将列表 a 中的最后一个元素赋值给 a[-1]。由于 a[-1] 指向列表中的最后一个元素,因此这实际上是在修改列表中的元素。
  3. 然后,我们打印出 a[-1] 的值。由于 a[-1] 在每次迭代中都会被重新赋值为列表 a 中的当前元素,因此打印的结果是 [0, 1, 2, 3] 中的每一个元素。

在这里插入图片描述
这段代码的目的是将列表 x 中的每个字符串转换为大写,并将转换后的字符串添加到列表 x 的末尾。然而,这段代码会导致意外的结果。

  1. for 循环中,你正在遍历列表 x 中的元素,并对每个元素执行 i.upper() 来将其转换为大写。然后,你尝试将转换后的字符串添加到列表 x 的末尾,这会改变正在遍历的列表,导致无限循环。
  2. 具体来说,当循环执行到第一个元素 'ab' 时,它会将其转换为大写形式 'AB' 并将其添加到 x 的末尾。然后,循环继续下一个元素,但此时列表 x 已经改变了,它现在包含了额外的大写字符串 'AB',因此循环将永远不会结束。

这也是在前面,我们说 “如果想要在循环的过程更改序列的内容,最好使用序列的切片作为迭代对象”:

x=['ab','cd']
for i in x[:]:x.append(i.upper())
print(x)
# ['ab', 'cd', 'AB', 'CD']

当然,还有以下两种方法可以实现:

# 方法一:使用另一个列表存储转换后的字符串
x = ['ab', 'cd']
result = []
for i in x:result.append(i.upper())
x.extend(result)
print(x)  # ['ab', 'cd', 'AB', 'CD']# 方法二:使用列表推导式创建新的列表
x = ['ab', 'cd']
x = x + [i.upper() for i in x]
print(x)  # ['ab', 'cd', 'AB', 'CD']

综合示例

下面是一个综合示例,展示了如何在 Python 中使用 ifwhilefor 语句来完成一些简单的任务。

# 定义一个整数列表
numbers = [1, 2, 3, 4, 5]# 使用 for 循环遍历列表
for number in numbers:if number % 2 == 0:print(f"{number} 是偶数")else:print(f"{number} 是奇数")# 使用 while 循环打印从 1 到 5 的数字
i = 1
while i <= 5:print(f"当前数字是 {i}")i += 1# 使用 if 语句检查一个条件
age = 20
if age >= 18:print("成年")
else:print("未成年")

其他控制流语句

除了 ifwhilefor 语句外,Python 还提供了一些其他的控制流语句,如 breakcontinuepass

  • break:用于立即退出循环。
  • continue:用于跳过当前循环中的剩余代码,继续执行下一次迭代。
  • pass:是一个占位符语句,用于在语法上需要一个语句的地方,但实际上不需要做任何事情。

示例代码

# 使用 break 退出循环
for i in range(10):if i == 5:breakprint(i)# 使用 continue 跳过特定的迭代
for i in range(10):if i % 2 == 0:continueprint(i)# 使用 pass 作为占位符
def dummy_function():pass

今天的分享就到这里了,如果,你感觉这篇博客对你有帮助的话,就点个赞吧!感谢感谢……

相关文章:

python基础语法--顺序结构

Python中的顺序结构主要包括流程控制语句&#xff0c;如 if、while 和 for 语句。这些语句允许你在程序中定义不同的执行路径&#xff0c;从而根据条件或循环次数来改变代码的执行流程。下面详细介绍这些语句的使用方法和示例。 if 语句 if 语句用于根据某个条件来决定是否执…...

软件游戏运行缺少vcruntime140.dll怎么办?总结四种有效简单方法

1. 文件基本信息 1.1 定义与作用 vcruntime140.dll是Microsoft Visual C 2015 Redistributable Package的一部分&#xff0c;它包含了C运行时库&#xff0c;用于支持使用Visual C开发的Windows应用程序。这个动态链接库&#xff08;DLL&#xff09;文件提供了程序执行时所需的…...

(undone) 阅读 MapReduce 论文笔记

参考&#xff1a;https://pdos.csail.mit.edu/6.824/papers/mapreduce.pdf 摘要&#xff1a;简单介绍了 MapReduce 是在大型分布式系统上工作的 Introduction 的内容总结&#xff1a; 1.介绍背景&#xff1a;为什么我们需要分布式系统&#xff1f;MapReduce 的意义是哪些 2.简…...

sql注入工具升级:自动化时间盲注、布尔盲注

项目地址&#xff1a;https://github.com/iamnotamaster/sql-injecter 给我之前写的sql注入脚本进行了一些升级&#xff0c;此文章就是对升级内容的分析&#xff0c;升级内容如下&#xff1a; 使用占位符foo来填充payload里需要经常修改的部分 自动判断循环 支持爆破和二分查…...

字节C++抖音直播一面-面经总结

1、Python和C的区别&#xff0c;Python的程序执行过程是怎样的&#xff1f;C和C呢? 解释型-编译型 不用分号-用分号 自动垃圾回收-delete 相对较慢-执行速度快 丰富的库-标注模板库 .py-解释器-字节码-PVM-输出结果 c-c with class malloc-new 标准库-STL 不重载-函数重载和…...

浅谈stm32的GPIO引脚配置模式

STM32的GPIO&#xff08;通用输入输出&#xff09;引脚可以被配置为多种模式&#xff0c;以适应不同的应用场景。下面介绍一些一些常见的STM32 GPIO引脚模式&#xff1a; 模拟输入模式&#xff08;Analog Input Mode&#xff09;&#xff1a;在这种模式下&#xff0c;GPIO引脚被…...

Meta Orion 原型的生产成本约为 10,000 美元

Orion Meta 是一项突破性的增强现实项目&#xff0c;展示了其迄今为止最先进的原型。经过多年的研究和数百万美元的开发&#xff0c;Meta 打造出了一款仅重 98 克的增强现实眼镜&#xff0c;能够将全息图投射到视线范围内的任何地方。这款眼镜由一个先进的输入系统驱动&#xf…...

MATLAB GUI设计原则与实践

MATLAB的图形用户界面&#xff08;GUI&#xff09;设计是一种强大的工具&#xff0c;用于创建交互式应用程序。良好的GUI设计不仅能够提升用户体验&#xff0c;还能提高应用程序的可用性和效率。本文将探讨MATLAB GUI设计的原则&#xff0c;并提供一些实用的代码示例。 1. GUI…...

电脑桌面显示不完整

UOS统信由于误操作&#xff0c;导致桌面放大了&#xff0c;桌面显示不完整&#xff0c;本文主要介绍如何恢复到正常的桌面。 文章目录 一、问题描述二、解决方案 一、问题描述 电脑使用过程中出现显示器只能显示部分画面&#xff0c;桌面图标异常变大&#xff0c;桌面随鼠标移…...

Spring Boot与观察者模式实现数据同步更新机制

在Spring Boot应用程序中实现观察者模式来同步更新数据是一种强大的设计方式,它可以帮助你构建响应式和松耦合的应用程序。观察者模式通常用于当一个对象的状态改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的基本概念 •Subject(被观察者):维护了一个…...

毕业设计选题:基于ssm+vue+uniapp的校园订餐小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…...

每日OJ题_牛客_HJ108求最小公倍数_C++_Java

目录 牛客_HJ108求最小公倍数_C_Java 题目解析 C代码 Java代码 牛客_HJ108求最小公倍数_C_Java 求最小公倍数_牛客题霸_牛客网 题目解析 A 和 B 的最小公倍数 A * B / 两者的最大公约数。最大公约数&#xff1a;辗转相除法。 C代码 #include <iostream> #includ…...

【项目总结】工程构建思路分析与分享

背景 写这篇文章的初衷是因为国产化项目临近结束&#xff0c;在做项目总结时&#xff0c;回想起了代码管理的相关问题。虽然工程搭建及管理是一个高级工程师必备的能力&#xff0c;但似乎每次一个新项目立项&#xff0c;都是从老的项目中拷贝工程框架&#xff0c;再进行定制修…...

3、AI测试辅助-测试计划编写(自动生成任务甘特图)

AI测试辅助-测试计划编写 一、创建测试计划1.1 使用ChatGpt生成测试计划1.1.1 测试计划细化-测试任务排期1.1.2 测试计划细化-利用plantuml输出甘特图&#xff08;不推荐&#xff09;1.1.3 测试计划细化-利用mermaid 生成甘特图&#xff08;推荐&#xff09; 一、创建测试计划 …...

MySQL:进阶巩固-触发器

目录 一、基本概述二、语法结构三、基本使用3.1 新增的触发器3.2 修改的触发器3.3 删除的触发器 一、基本概述 触发器是与表有关的数据对象&#xff0c;在INSERT/UPDATE/DELETE之前或者是之后&#xff0c;触发并执行触发器中定义的SQL语句的集合&#xff0c;触发器的这种特性可…...

python获取百度地图路径规划

自制语音助手想做一个查询交通路线的功能&#xff0c;于是就想到了百度地图。在百度地图的服务器端应用中&#xff0c;提供了“轻量级路线规划”API接口&#xff0c;正好可以满足需求。要用这个接口&#xff0c;需要注册百度地图账号并创建一个服务器端的应用。有关开通百度地图…...

Spring Boot 进阶- Spring Boot 自定义拦截器详解

上篇文章中我们创建了一个RestFul风格的接口,并且介绍了如何对其结果进行格式化的方式。这篇文章我们来讲在SpringMVC中常用到的另一个概念拦截器。 什么是拦截器? 在Spring MVC中拦截器有点类似于在Servlet中的过滤器的概念,主要是用来拦截用户求,并且对用户请求进行相应…...

ACM第三次考核题解

ACM第三次考核题解 题目序号难度题目编号题目考察知识点1签到题A这是一道很难的题&#xff01;&#xff01;&#xff01;输出2迷之难度F神说要有光&#xff0c;于是有了手电筒贪心3简单BThis is a real English problem&#xff01;思维 英语4简单C玩具简单排序5简单I“近义词…...

基于Vue3内置的lodash函数库实现防抖节流

前言 防抖节流是可以说是一种优化组件性能的技巧&#xff0c;可以有效减少组件中的渲染次数和计算量&#xff0c;从而提高组件的响应速度和用户体验。在Vue3中可以使用lodash库中的debounce和throttle函数来分别实现防抖和节流。当然也可以自行设计实现防抖节流函数&#xff0…...

ls -a有什么作用

ls -a 是一个在类Unix操作系统&#xff08;如Linux、macOS&#xff09;中使用的命令&#xff0c;用于列出目录中的所有文件和目录&#xff0c;包括那些以.开头的隐藏文件。 具体作用如下&#xff1a; ls: 这是一个列出目录内容的命令。 -a: 这是一个选项&#xff0c;表示"…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...