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

python基础3——流程控制

文章目录

  • 一、操作符
    • 1.1 比较操作符
    • 1.2 逻辑操作符
    • 1.3 成员操作符
    • 1.4 身份操作符
  • 二、流程控制
    • 2.1 条件判断
    • 2.2 循环语句
      • 2.2.1 for循环
      • 2.2.2 while循环
    • 2.3 continue与break语句
    • 2.4 文件操作函数
  • 三、函数
    • 3.1 定义函数
    • 3.2 作用域
    • 3.3 闭包
    • 3.4 函数装饰器
    • 3.5 内建函数

一、操作符

  • 操作符:一个特定的符号,用它与其他数据类型连接起来组成一个表达式。常用于条件判断,根据表达式返回True/False采取动作。
    在这里插入图片描述

1.1 比较操作符

  • 比较操作符:比较两边值。
操作符描述示例
==相等,两边值是否相等(6 == 6) 结果 True
!=不相等,两边值是否不相等(6 != 6) 结果False
>大于,左边值是否大于右边值(8 > 6) 结果True
<小于,左边值是否小于右边值(8 < 6) 结果False
>=大于等于,左边值是否大于等于右边值(6 >= 6) 结果True
<=小于等于,左边值是否小于等于右边值(6 <= 6) 结果True

1.测试“==”。
在这里插入图片描述
2.测试“!=”。
在这里插入图片描述
3.测试“>、<”。
在这里插入图片描述
4.测试“>= 、<=”。
在这里插入图片描述

1.2 逻辑操作符

  • 判断条件逻辑。
操作符逻辑表达式描述
andx and y与,所有的条件都 True结果才为True;只要有一个为False,结果就为False
orx or y或,所有的条件只要有一个是True结果就为True
notnot x非,结果取反

1.测试“and、or”。
在这里插入图片描述
2.测试“not”。
在这里插入图片描述

1.3 成员操作符

  • 判断某个元素是否在数据类型里。
操作符描述示例
in如果在指定的序列中找到值返回True,否则返回Falsecomputer = [“主机”,“显示器”,“鼠标”,“键盘”]
print(“主机” in computer) 结果True
print(“音响” in computer) 结果False
not in如果在指定的序列中没有找到值返回True,否则返回Falseprint(“主机” not in computer) 结果False
print(“音响” not in computer) 结果True

1.测试“in”。
在这里插入图片描述

2.测试“not in”。
在这里插入图片描述

1.4 身份操作符

  • 判断两个对象的内存地址标识符id是否相等。
操作符描述
is判断两个标识符是否引用一个对象
is not判断两个标识符是否引用不同对象

1.测试“is”。
在这里插入图片描述

2.测试“not is”。
在这里插入图片描述

二、流程控制

2.1 条件判断

//语法。if  <表达式>:<代码块>
elif <表达式>:<代码块>
else:<代码块>

1.单分支,判断是否成年。

age = int(input("请输入你的年龄: "))if age > 18:print("恭喜,你已经成年!")
else:print("抱歉,你还未成年!")

在这里插入图片描述
2.三目表达式写法。

age = int(input("请输入你的年龄: "))print("恭喜,你已经成年!" if age > 18 else "抱歉,你还未成年!")

在这里插入图片描述
3.多分支,根据人的年龄段划分。

age = int(input("请输入你的年龄: "))if age < 7 :print("儿童")
elif age >= 7 and age < 17:print("少年")
elif age >= 18 and age < 40:print("青年")
elif age >= 41 and age < 48:print("壮年")
else:print("老年")

在这里插入图片描述

2.2 循环语句

  • 循环的作用在于将一段代码重复执行多次。
  • Python中实现循环常用有两个语句:for、while

2.2.1 for循环

  • 一般用于遍历数据类型的元素进行处理,例如字符串、列表。
//语法.for <变量> in <序列>:<代码块>

1.例一,遍历字符串。

s = "123456"
for i in s:print(i)

在这里插入图片描述
2.例二,遍历列表。

computer = ["主机","显示器","鼠标","键盘"]
for i in computer:print(i,len(i))

在这里插入图片描述
3.例三,遍历字典。

computer = {"主机":5000,"显示器":1000,"鼠标":60,"键盘":150}
for i in computer.items():print(i) print("名称: %s\t价格: %s" % (i[0],i[1]))

在这里插入图片描述
4.例四,嵌套循环。

s1 = "123456"
s2 = "456789"
for i in s1:for x in s2:if i == x:print(i)

在这里插入图片描述

2.2.2 while循环

  • 在某条件下循环执行一段代码,即重复相同的任务。
//语法。
while <表达式>:<代码块>

1.示例1,当条件满足时停止循环。

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

在这里插入图片描述
2.例二,死循环。

count = 0
while True:print(count)count += 1

2.3 continue与break语句

  • continue 当满足条件时,跳出本次循环。
  • break 当满足条件时,跳出所有循环。
  • 注意事项:只有在for、while循环语句中才有效。

1.例一,continue语句。

for n in range(8):if n == 3:continueelse:print(n)

在这里插入图片描述
2.例二,break。

for n in range(8):if n == 3:breakelse:print(n)

在这里插入图片描述
3.案例:用户登录,三次错误机会

count = 0
while True:if count < 3:name = input("请输入你的用户名: ").strip() # .strip()去除首尾空格if len(name) == 0:print("输入不能为空!")continueelif name == "qingjun":print("登录成功.")breakelse:print("用户名错误,请重新输入!")count += 1else:print("超出错误次数, 退出!")break

在这里插入图片描述

2.4 文件操作函数

  • 要想读取文件(如txt、csv等),第一步要用open()内建函数打开文件,它会返回一个文件对象,这个对象拥有read()、write()、close()等方法。

语法:open(file,mode=‘r’,encoding=None)

  • file:打开的文件路径,可以是绝对路径,也可以是相对路径。
  • mode(可选):打开文件的模式,如只读、追加、写入等。
    • r:只读。
    • w:只写。
    • a:在原有内容的基础上追加内容(末尾)。
    • w+:读写。
  • 如果需要以字节(二进制)形式读取文件,只需要在mode值追加‘b’即可,例如wb
  • 文件对象操作,f = open(‘test.txt’)
方法描述
f.read([size])读取size字节,当未指定或给负值时,读取剩余所有的字节,作为字符串返回
f.readline([size])从文件中读取下一行,作为字符串返回,如果指定size则返回size字节。
f.readlines([size])读取size字节,当未指定或给负值时,读取剩余所有的字节,作为列表返回。
f.write(str)
f.flush
写字符串到文件。
刷新缓冲区到磁盘。
f.seek(offset[,whence=0])在文件中移动指针,从whence 偏移offset个字节。
(0代表文件起始位置,默认。1代表当前位置2代表文件末尾)
f.tel()当前文件中的位置 (指针)
f.close()关闭文件

1.例一,读取文件内容。

qingjun = open('qingjun.txt',mode='r',encoding=None)
print(qingjun.read())
qingjun.flush()
qingjun.close()

在这里插入图片描述

2.例二,遍历打印每一行。

qingjun = open('qingjun.txt',mode='r',encoding=None)
for line in qingjun:print(line.strip('\n'))   # 去掉换行符qingjun.flush()
qingjun.close()

在这里插入图片描述

3.with语句:不管在处理文件过程中是否发生异常,都能保证with 语句执行完毕后已经关闭了打开的文件句柄。

with open("qingjun.txt",encoding="utf8") as f:data = f.read()print(data)

在这里插入图片描述

三、函数

函数概念:

  • 指一段可以直接被另一段程序或代码引用的程序或代码。
  • 在编写代码时,常将一些常用的功能模块编写成函数,放在函数库中供公共使用,可减少重复编写程序段和简化代码结构。

3.1 定义函数

语法:

def 函数名称(参数1,参数2,...):<代码块>return <表达式>      //reurn是返回的状态值,表示代码执行结果。

1.定义普通函数。

def hello():print("Hello World!")
hello() # 调用函数

2.定义传参函数,传入固定参数。

##定义求和函数。
def f(a, b):return a + b
print(f(1,2))# 按参数位置赋值
print(f(b =2,a=1)) # 按对应关系赋值##生成序列列表。
def qingjun(n):result = []x=0while x < n:result.append(x)x +=1return result
print(qingjun(9))##参数默认值:预先给参数定义默认值,如果调用函数时没指定该值,则用默认值。
def f(a, b=2):return a + b
print(f(1))
print(f(1,3))

3.定义传参函数,传入多个未知参数。

  • 当不知道有多少个参数时可以在参数前面加*与**,表示可接收任意多个参数。
  • *name 接收任意多个参数,并放到一个元组中。
  • **name 接收一个键值,并存储为字典。
//传入多个参数,计算总和。
def func(*seq):x=0for n in seq:x += nreturn xprint(func(1,2,3))//传入多个键值,进行处理。
def func(**computer):for k,v in computer.items():print("名称:%s\t价格:%s" %(k,v))func(主机=5000,显示器=1000,鼠标=60,键盘=150)

4.定义匿名函数。

  • 匿名函数:没有名字的函数,使用lambda关键字定义,一般仅用于单个表达式。
//定义求和函数。
s = lambda a, b: a+b
print(s(1,2))//等价于
def func(a,b):return a+b
print(func(1,2))

3.2 作用域

含义:

  • 限制一个变量或一段代码可用范围。好处是提高程序逻辑的局部性,减少名字冲突。

作用域范围:

  • Local (局部作用域):在函数中定义的变量。de关键字定义的语句块中,即函数中定义的变量。
  • Enclosed (嵌套作用域):一般出现在函数中嵌套一个函数时,在外部函数中的作用域称为嵌套作用域 (闭包常见)。
  • Global (全局作用域):文件顶层定义的变量。
  • Built-in (内置作用域):系统内解释器定义的变量,例如关键字。
    在这里插入图片描述

1.示例。

qingjun1 = 2  ##全局变量。
def  baimu():   ##定义函数global qingjun2   ##将局部变量变成全局变量。qingjun2 =3   #局部变量。baimu()   ##引用函数。
print(qingjun1)   ##打印全局变量。
print(qingjun2)   ##打印局部变量。

3.3 闭包

含义:

  • 闭包是一个定义在函数内部的函数,闭包使得变量即使脱离了该函数的作用域范围也依然能被访问到。
  • 嵌套函数也是闭包的一种形式,将内部嵌套定义的函数作为返回值。

构成闭包的三个条件:

  • 两层以上嵌套关系
  • 内部函数调用外部函数定义的变量
  • 外部函数返回内部函数体对象,而不是函数体结果(加括号)

1.示例。

def qingjun():x = 1def baimu():print(x)return baimu  #不加括号表示返回函数体不执行函数,外部调用时才会执行;加括号代表直接调用执行函数。qingjun()  #调用外部函数。
qingjun()()  #调用内部函数。

3.4 函数装饰器

含义:

  • 装饰器本质上是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。

应用场景:

  • 记录日志、性能测试、权限效验等。

1.例一,原函数无传入参数。

######################################
#定义原函数。
def hello():print("原函数功能")
hello()   #调用原函数。
######################################
#定义装饰器。
def qingjun(mq):   #新增函数调用器,传入参数mq,mq也可以是函数。def baimu():print("原函数准备执行了!")    ##新增功能。mq()     #原函数放在内部函数的执行逻辑里。print("原函数执行完毕!")   ##新增功能。return baimu  #打印内部函数体,外部调用时才执行该函数。
qingjun(hello)()   #调用内部函数,同时给外部函数传入函数hello,hello为原函数。

2.例二,语法糖@用法。

######################################
#定义装饰器。
def qingjun(mq):def baimu():print("原函数准备执行了!")mq()print("原函数执行完毕!")return baimu
######################################
#定义原函数时,直接@装饰器调用。
@qingjun
def hello():print("原函数功能")
hello()

3.例三,原函数传入参数。

######################################
#定义装饰器。
def qingjun(mq):def baimu(u):print("原函数准备执行了!")mq(u)print("原函数执行完毕!")return baimu
######################################
#定义原函数时,直接@装饰器调用,并传入参数u。
@qingjun
def hello(u):print(u)
hello("已传入参数")

3.5 内建函数

函数作用语法
range()动态生成数字序列。range(1,6)、range(10)
open()打开、并操作文件。open(file,mode=‘r’,encoding=None)
map()根据提供的函数处理序列中的元素,处理完后返回一个迭代器对象。map(function, iterable, …)
filter()用于过滤序列,过滤掉不符合条件的元素,处理完后返回一个迭代器对象。filter(function, iterable)
sorted()对所有可迭代的对象进行排序操作。sorted(iterable, *, key=None, reverse=False)
key:指定带有单个参数的函数,用于从interable的每个元素取出比较的键,默认为None(直接比较元素)。
reverse 排序规则,True降序, False升序(默认)
reversed()返回一个反转的迭代器。reversed(seq)
join()将序列中的元素以指定的字符连接,生成一个新的字符串。‘拼接符’.join(凭借对象)
min()返回可迭代对象中最小的元素qingjun = [1,2,3,4,5,6,7]
print(min(qingjun))
max()返回可迭代对象中最大的元素qingjun = [1,2,3,4,5,6,7]
print(max(qingjun))
sum()对可迭代对象求和qingjun = [1,2,3,4,5,6,7]
print(sum(qingjun))
zip()对多个可迭代对象创建一个聚合,返回一个元组的迭代器。x = [1, 2, 3],y = [4, 5, 6]
qingjun = zip(x, y)
print(list(qingjun))
globals()字典格式返回当前范围的全局变量\
locals()字典格式返回当前范围的局部变量\

相关文章:

python基础3——流程控制

文章目录 一、操作符1.1 比较操作符1.2 逻辑操作符1.3 成员操作符1.4 身份操作符 二、流程控制2.1 条件判断2.2 循环语句2.2.1 for循环2.2.2 while循环 2.3 continue与break语句2.4 文件操作函数 三、函数3.1 定义函数3.2 作用域3.3 闭包3.4 函数装饰器3.5 内建函数 一、操作符…...

kubernetes中最小组件——Pod

目录 一、Pod简介 二、Pod的使用方式 三、Pause——Pod中底层基础容器 四、为什么kubernetes这样设计Pod 五、Pod的分类 1.自主式Pod 2.控制器管理的Pod 3.静态Pod 六、Pod容器的分类 1. 基础容器&#xff08;infrastructure container&#xff09; 2. 初始化容器&am…...

C++ 友元

文章目录 前言一、什么是友元二、友元的特性三、示例代码总结 前言 在C编程中&#xff0c;友元&#xff08;friend&#xff09;是一种特殊的关系&#xff0c;允许一个类或函数访问另一个类中的私有成员。 一、什么是友元 1.友元 的定义&#xff1a; 友元在C中可以被用于类和…...

Vulkan 绘制显示设计

背景 众所周知&#xff0c;Vulkan是个跨平台的图形渲染API&#xff0c;为了友好地支持跨平台&#xff0c;Vulkan自然也抽象出了很多接口层去对接各个操作系统&#xff0c;抹平系统间的差异&#xff0c;Swap Chains即为WSI。 其本质上是一种图像队列&#xff0c;此队列会按顺序…...

Linux性能分析工具介绍(一)--cpu及功耗相关工具介绍

目录 一、引言 二、CPU及功耗分析工具介绍 ------>2.1、cpuinfo ------------>2.1.1、cpuid指令 ------>2.2、lscpu ------>2.3、turbostat ------>2.4、rdmsr ------>2.5、mpstat ------>2.6、/proc/stat ------>2.7、powertop ----------…...

智能财务分析的无冕之王-奥威BI数据可视化工具

利用智能数据可视化分析工具&#xff0c;可极大提升财务分析效率和报表可读性&#xff0c;缩短从分析到决策的耗时。但财务分析的难度往往比其他分析更高&#xff0c;因为它的分析指标计算组合变化太多也太快。哪些数据可视化工具能胜任智能财务数据分析&#xff1f; 奥威BI数…...

.NET 应用程序 部署

**硬件支持型号 点击 查看 硬件支持 详情** DTU701 产品详情 DTU702 产品详情 DTU801 产品详情 DTU802 产品详情 DTU902 产品详情 G5501 产品详情 本文内容 在设备上部署 dotnet应用&#xff0c;与任何其他平台的部署相同&#xff0c;可以2种方式&#xff1a; 依赖于框…...

Linux CentOS安装NVIDIA GPU驱动程序和NVIDIA CUDA工具包

要在CentOS上安装NVIDIA驱动程序和NVIDIA CUDA工具包&#xff0c;您可以按照以下步骤进行操作&#xff1a; 1. 准备工作&#xff1a; 确保您的系统具有兼容的NVIDIA GPU。您可以在NVIDIA官方网站上查找支持CUDA的GPU型号列表。如果您之前已经安装了Nouveau驱动程序并禁用了它…...

剑指Offer13.机器人的运动范围 C++

1、题目描述 地上有一个m行n列的方格&#xff0c;从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动&#xff0c;它每次可以向左、右、上、下移动一格&#xff08;不能移动到方格外&#xff09;&#xff0c;也不能进入行坐标和列坐标的数位之和大于k的…...

List、Map、Set打印

List List&#xff1a;和数组类似&#xff0c;List可以动态增长&#xff0c;查找元素效率高&#xff0c;插入删除元素效率低&#xff0c;因为会引起其他元素位置改变。 普通[1,2] 1.循环 2.System.out.println(list); int数组[1,2,3,4,5,6,1,2,3] 1.for (int[] array : list)…...

软件机器人在渔业船员证书核发中自动化二次审批制证,提高效率和准确性

近年来&#xff0c;随着科技的不断进步&#xff0c;自动化软件机器人在各个领域得到了广泛应用。在渔业船员证书核发事项中&#xff0c;传统的审批和制证流程相对繁琐。博为小帮软件机器人可以让这一流程变得更加高效和准确。 在过去&#xff0c;渔业船员证书核发事项需要在省级…...

Godot4 C# vscode开发环境搭建

用vscode搭建Godot4 C# 开发环境搭建 软件Godot配置vscode配置结果参考 软件 Godot .Net版本: 下载链接vscode :自行下载.netcore7&#xff1a;.netcore6可能也行vscode插件&#xff1a; Godot配置 1.配置文件用VSCode打开 2.生成C#项目 项目–>工具–>C#->Creat…...

nginx简介与安装配置,目录结构和配置文件介绍

一.nginx简介 1.简介 2.特性 二.nginx安装 1.rpm包方式 &#xff08;1&#xff09;下载扩展源 &#xff08;2&#xff09;安装扩展rpm包&#xff0c;nginx -V查看配置参数&#xff0c;后面源码安装时要用到 2.源码方式 &#xff08;1&#xff09;建议提前下好所需要的部…...

CTF流量题解http4.pcapng

流量分析 导出http 打开报错 验证文件头&#xff0c;发现是zip。 图常片见里文可件能的包16含进:压制缩头包部,word,pdf JPG FF D8 FF E0/FF D8 FF E1 PNG 89 50 4E 47 GIF 47 49 46 38 ZIP 50 4B 03 04 RAR 52 61 72 21 MP3 49 44 33 0 改后缀 使用工具爆破。 git clone git…...

旷视科技AIoT软硬一体化走向深处,生态和大模型成为“两翼”?

齐奏AI交响曲的当下&#xff0c;赛道玩家各自精彩。其中&#xff0c;被称作AI四小龙的商汤科技、云从科技、依图科技、旷视科技已成长为业内标杆&#xff0c;并积极追赶新浪潮。无论是涌向二级市场还是布局最新风口大模型&#xff0c;AI四小龙谁都不甘其后。 以深耕AIoT软硬一…...

STM32 F103C8T6学习笔记2:GPIO的认识—GPIO的基本输入输出—点亮一个LED

今日继续学习使用 STM32 F103C8T6开发板 点亮一个LED灯&#xff0c;文章提供源码&#xff0c;测试工程&#xff0c;实验效果图&#xff0c;希望我的归纳总结会对大家有帮助~ 目录 GPIO的认识与分类 &#xff1a; 引脚安排整理&#xff1a; 定时器的引脚例举&#xff1a; …...

数组相关练习

数组练习 将数组转化成字符串数组拷贝求数组元素的平均值查找数组中指定元素(顺序查找)二分查找冒泡排序数组逆序 将数组转化成字符串 import java.util.Arrays;public class Text1 {public static void main(String[] args) {int[] arr {5, 6, 4, 2};System.out.println(Arr…...

Leetcode-每日一题【剑指 Offer 11. 旋转数组的最小数字】

题目 把一个数组最开始的若干个元素搬到数组的末尾&#xff0c;我们称之为数组的旋转。 给你一个可能存在 重复 元素值的数组 numbers &#xff0c;它原来是一个升序排列的数组&#xff0c;并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如&#xff0c;数组 [3,4…...

git教程(第一次使用)

一、gitee和github区别 二、git使用 下载地址 windows&#xff1a;https://gitforwindows.org/ mac&#xff1a;http://sourceforge.net/projects/git-osx-installer/ 1.git初次运行前的配置 &#xff08;1&#xff09;配置用户信息 git config --global user.name "…...

Autoware.ai1.14.0自动驾驶-Demo运行

Autoware.ai1.14.0自动驾驶-Demo运行 数据准备 下载数据&#xff1a; wget https://autoware-ai.s3.us-east-2.amazonaws.com/sample_moriyama_data.tar.gz wget https://autoware-ai.s3.us-east-2.amazonaws.com/sample_moriyama_150324.tar.gz一定要注意解压文件是在.auto…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...