Python基础语法(中)—— python列表、字符串、函数

文章目录

    • 5. python中的列表
      • 5.1 列表的初始化
        • 5.1.1 直接初始化
        • 5.1.2 通过append函数初始化
        • 5.1.3 通过for语句初始化列表长度和每个位置的数值
      • 5.2访问列表元素
      • 5.3使用循环语句遍历列表
      • 5.4列表的切片操作
      • 5.5列表的复制
      • 5.6列表的运算
      • 5.7列表的常用操作
      • 5.8嵌套列表
      • 5.9列表其他小知识点
    • 6.python中的字符串
      • 6.1字符串与整数的关系——ASCII码
      • 6.2字符串常量的写法
      • 6.3表示特殊字符——转义
      • 6.4访问字符串中的每个字符
      • 6.5使用循环语句遍历字符串
      • 6.6字符串的切片操作
      • 6.7字符串的复制操作
      • 6.8字符串的运算
      • 6.9字符串的常用操作
    • 7.python中的函数
      • 7.1编写函数
      • 7.2函数的实参与形参
        • 7.2.1形参的初始化方式
        • 7.2.2带默认值的形参
      • 7.3变量的作用域
      • 7.3函数嵌套
      • 7.4pass语句
      • 7.5函数的参数传递
        • 7.5.1值传递
        • 7.5.2引用传递列表采用引用传递。
      • 7.6函数return语句
      • 7.7函数lambda表达式
      • 7.8函数递归

5. python中的列表

python中的列表,就是C++中的数组,用法是相同的,只是语法上有些差别。但是,python中的列表可以存放不同的数据类型

5.1 列表的初始化

5.1.1 直接初始化

形如:

a = []  # 定义一个空列表
b = [1, 2]  # 含有2个整数的列表
c = [6, "python", 3.14]  # 含有3个不同类型元素的列表
print(a, b, c)
5.1.2 通过append函数初始化

append() 函数可以在 列表末尾 添加一个元素。形如:

a = [] #先定义一个空列表
for i in range(5):a.append(0) #初始化出5个0的列表
print(a)n = 5
a = []
for i in range(n):a.append(i ** 2) #初始化成[0, 1, 4, 9, 16]
print(a)
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/24180aeb4289448aa3e71ed728932a1b.png)a.append(666) #在列表尾插一个数据
print(a)

在这里插入图片描述

5.1.3 通过for语句初始化列表长度和每个位置的数值

形如:

a = [0 for i in range(4)] #初始化 a = [0, 0, 0, 0]
print(a)n = 3
b = [i ** 3 for i in range(n)] #初始化 b = [0, 1, 8]
print(b)

5.2访问列表元素

与C++中的访问数组一样。可以通过下标读/写列表中的元素,下标从0开始,也可以是负数,负数下标表示的是除以列表长度的余数对应的位置, 即从后往前数。 如果列表长度是 n,那么下标只能取 −n∼n−1 之间的整数,超出范围会报错。

例如:

a = [1, 2, 4, 8]
print(a[0], a[2], a[-4], a[-2])  #输出:1 4 1 4
a[0] = 10  #修个第0个元素的数值
print(a)

5.3使用循环语句遍历列表

例如:

#法一
a = [1, 2, 4, 8, 16]
for i in range(len(a)):print(a[i], end=' ')
print()#法二
b = [1, 2, 4, 8, 16]
for x in b:print(x, end=' ')

例题:求斐波那契数列的第n项

n = int(input())
a = [0 for i in range(n + 1)] #a[0] ~ a[n]
a[0] = 0
a[1] = 1
for i in range(2, n + 1):a[i] = a[i - 1] + a[i - 2]
print(a[n])

5.4列表的切片操作

列表的切片操作会返回一个新列表。用法:

  1. a[begin:end] 会返回包含a[begin], a[begin + 1], …, a[end - 1]的列表。
  2. 省略begin时,begin的默认值是0。
  3. 省略end时,end的默认值是列表长度。
  4. 如果begin或end是负数,表示的是除以列表长度后的余数。(取余运算)

例如:

a = [1, 2, 3, 4]
#注意输出的是一个列表
print(a[1:3]) #输出:[2, 3]
print(a[:3]) #输出:[1, 2, 3]
print(a[1:]) #输出:[2, 3, 4]
print(a[-3:-1]) #输出:[2, 3]#切片也支持写操作
a[1:] = [4, 3, 2] #输出:[1, 4, 3, 2]
print(a)

5.5列表的复制

列表跟其他变量类型不同,如果用等号复制列表,那么原列表和新列表是同一个列表。 (相当于是深拷贝)对新列表修改,会修改原列表的值。例如:

a = [i for i in range(5)] #a = [0, 1, 2, 3, 4]
b = a
b[0] = 10
print(a) #a = [10, 1, 2, 3, 4]

使用切片,可以得到一个原列表的浅拷贝。此时再修改新列表,原列表就不会发生变化了。例如:

a = [i for i in range(5)] #a = [0, 1, 2, 3, 4]
b = a[:]
b[0] = 10
print(a) #a = [0, 1, 2, 3, 4]
print(b) #b = [10, 1, 2, 3, 4]

5.6列表的运算

  1. 列表的加法可以将两个列表拼接起来,得到一个新列表。与字符串的加法是一致的
  2. 列表乘以一个整数,可以将若干个自身拼接起来,得到一个新列表。与字符串也是一致的
a = [0, 1, 2]
b = [3, 4]c = a + b  # c相当于a和b的浅拷贝
print(c)  # 输出[0, 1, 2, 3, 4]d = a * 3  # d相当于a的浅拷贝
print(d)  # 输出[0, 1, 2, 0, 1, 2, 0, 1, 2]a += [3]  # 在a的末尾添加一个新元素3
print(a)  # 输出[0, 1, 2, 3]

5.7列表的常用操作

  1. len(a) 返回列表长度。
  2. a.append(x) 在列表末尾添加一个新元素。
  3. a.pop() 删除列表的最后一个元素。
  4. a.reverse() 将整个列表翻转。
  5. a.sort() 将整个列表从小到大排序。

例如:

a = [0, 1, 2]print(len(a))  # 输出3a.append(3)
print(a)  # 输出[0, 1, 2, 3]a.pop()
print(a)  # 将[0, 1, 2, 3]的最后一个数删掉,所以输出[0, 1, 2]a.reverse()
print(a)  # 输出[2, 1, 0]a.sort()
print(a)  # 输出[0, 1, 2]

5.8嵌套列表

列表中的元素也可以是列表,相当于C++中的二维数组。例如:

matrix = [[0, 1, 2],[3, 4, 5],[6, 7, 8],
]
print(matrix)
matrix[0][1] = 99
print(matrix[0][1])#遍历方法一
for i in range(len(matrix)):for j in range(len(matrix[i])):print(matrix[i][j], end=' ')print() #换行
print()#遍历方法二
for row in matrix:for x in row:print(x, end=' ')print()

在这里插入图片描述
嵌套列表的常用初始化方式有两种。

①类似于一维列表的初始化,采用append()函数初始化:

matrix = []
for i in range(3):row = []for j in range(3):row.append(i * 3 + j)matrix.append(row)
print(matrix)

在这里插入图片描述
②采用for语句直接初始化(比较复杂,就是套娃),也类似于一维列表,如:a = [i for i in range(3)]

#第一步:与上面append一样
matrix = []
for i in range(3):row = []for j in range(3):row.append(i * 3 + j)matrix.append(row)
print(matrix)#第二部:把内部的列表初始化,如:
matrix = []
for i in range(3):row = [i * 3 + j for j in range(3)]matrix.append(row)
print(matrix)#第三步:把外部的列表再初始化,即把里面的row列表直接放到matrix中取:
matrix = []
for i in range(3):matrix.append([i * 3 + j for j in range(3)])
print(matrix)#第四步:直接写二维列表:
matrix = [[i * 3 + j for j in range(3)] for i in range(3)]

5.9列表其他小知识点

  • 当需要读入一行整数时,可以用:a = list(map(int, input().split()))。类似地,当需要读入一行浮点数时,可以用a = list(map(float, input().split())):
  • 两种方法将列表逆转:法①使用reverse内置函数:a.reverse() ; 法②使用:a[::-1]

6.python中的字符串

6.1字符串与整数的关系——ASCII码

每个常用字符都对应一个-128 ~ 127的数字,二者之间可以相互转化。注意:目前负数没有与之对应的字符。

常见的ASCII码:‘A’- 'Z’是65 ~ 90,‘a’ - 'z’是97 - 122,0 - 9是 48 - 57。空格时32,换行时10

  • ord()函数可以求一个字符的ASCII码。注意输入是一个字符,而不是字符串。
  • chr()函数可以将一个ASCII码转化成对应的字符。

例如:

c = "A"
print(ord(c)) #输出65
print(chr(97)) #输出a

注意: 虽然字符可以跟整数相互转化,但 在Python中,字符不能参与数值运算 ,这一点跟C++、Java等语言是不同的。

6.2字符串常量的写法

注意:在 Python中,字符串既可以用单引号来表示,也可以用双引号来表示,二者完全相同 。这一点跟C++、Java等编程语言是不同的,在这些编程语言中,用单引号来表示字符,用双引号来表示字符串。

两个或多个字符串常量并排写,会被自动合并 ,例如:

c = "I love " "eating ""eggs"
print(c) #输出I love eating eggs

一个字符串如果包含多行,可以采用"“”…“”"或者’‘’…‘’'的初始化方式(三对引号),字符串中将自动包含回车字符,例如:

a = """Usage: thingy [OPTIONS]-h                        Display this usage message-H hostname               Hostname to connect to"""
print(a)

在这里插入图片描述

6.3表示特殊字符——转义

当想在字符串中表示特殊字符时,一般可以在字符前加反斜杠\。常见需要转义的字符有:

在这里插入图片描述
例如:

print("My name is:\nSuntong") #\n表示换行
print("My age is \'18\'") #转义引号
print("My favorite sport is \"basketball\"")

在这里插入图片描述

6.4访问字符串中的每个字符

与列表一样,可以通过下标读取字符串中的每个字符,下标从0开始,也可以是负数,负数下标表示的是除以字符串长度的余数对应的位置。负数下标相当于将字符串首位相接,然后从0往前数。如果字符串长度是 n,那么下标只能取 −n∼n−1 之间的整数,超出范围会报错。

注意:字符串中的字符是不可以修改的,与C++一样,他们都是常量字符串
例如:

s = "hello world"
print(s[0], ord(s[0])) #输出:h 104
a[0] = s #报错

6.5使用循环语句遍历字符串

①可以通过下标访问,例如:

s = "hello world"
for i in range(len(s)):print(s[i], end='')
print()

②可以通过for … in …直接遍历,例如:

s = "hello world"
for i in s:print(i, end='')
print()

6.6字符串的切片操作

与列表的切片操作一致,字符串的切片操作会返回一个新字符串。用法:

  • a[begin:end] 会返回包含a[begin], a[begin + 1], …, a[end - 1]的字符串。
  • 省略begin时,begin的默认值是0。
  • 省略end时,end的默认值是字符串长度。
  • 如果begin或end是负数,表示的是除以字符串长度后的余数。

例如:

s = "hello world"
print(s[0:5]) #输出:hello
print(s[-11:-6]) #输出:hello
print(s[0:5:2]) #步长是2,输出:hlo

注意:与列表切片的区别,字符串的切片操作不支持写操作,常量字符串不支持写操作

6.7字符串的复制操作

通过上面,我们知道列表的复制是深拷贝,即通过复制,两个列表共用的是一个列表,修改一个列表,另一个列表也会发生改变。而与列表不同,字符串的复制属于浅拷贝,字符串的复制会得到一个新的字符串。

6.8字符串的运算

  1. 与列表相同,字符串的加法可以将两个字符串拼接起来,得到一个新字符串。
  2. 与列表一致,字符串乘以一个整数,可以将若干个自身拼接起来,得到一个新字符串。
  3. 与列表的比较操作一致,字符串也支持比较运算符,按字典序比较大小。即如果两个字符串相同,则表示相等;否则找到两个字符串从左到右数第一个不一样的字符,哪个字符串的字符的ASCII码小,哪个字符串的字典序就小;另外空字符比任何字符都小。

例如:

s1 = "hello"
s2 = "world"
s = s1 + ' ' + s2
print(s) #输出:hello world
s3 = s1 * 3
print(s3) #输出:hellohellohello
print(s1 < s2) #输出:True

6.9字符串的常用操作

pass

7.python中的函数

前提:在python中,函数和变量没有什么区别,函数就是一个特殊的参数,我们可以给函数的参数中传函数。

为什么要定义函数(方法):当代码中需要重复使用相同的逻辑时,可以使用函数来减少代码量。当代码较长时,可以使用函数来将逻辑分割成若干部分,使代码结构更容易让人看懂。
而所有编程语言的函数的用法都是一致的,只不过是写法不同。

7.1编写函数

Python中一个典型的函数定义包括以下部分:关键字def、函数名称、由0个或多个形参组成的列表以及函数体。

例如:编写一个求阶乘的函数:

def fac(n):res = 1for i in range(1, n + 1):res *= ireturn resprint(fac(10)) #标准格式下,函数的前面与后面要空两格

函数名称是fac,给它传入一个n,会返回n的阶乘。return语句负责结束函数并返回res的值。

7.2函数的实参与形参

实参指调用函数时传入的变量或常量,形参指定义函数时参数列表里的变量。形参在调用完成后会被系统自动回收。形参列表可以为空

7.2.1形参的初始化方式

第一种是用位置实参来初始化形参。顾名思义,实参会按位置关系来初始化形参,第一个实参初始化第一个形参,第二个实参初始化第二个形参,依此类推。形参和实参的个数必须匹配。例如:

def fun(a, b, c, d):print("a =", a, end=' ')print("b =", b, end=' ')print("c =", c, end=' ')print("d =", d, end=' ')fun(1, True, "python", 3.14) #传参的个数必须与函数形参个数相等

第二种是用关键字实参来初始化形参。此时实参 不再按位置关系 来初始化形参,而是按变量名初始化。例如:

f(b=1, c=True, a="Python", d=4.2)  # 输出 a = Python, b = 1, c = True, d = 4.2

注意:两种方式也可以混合使用,但是位置实参一定要放到关键字实参之前。 例如:

# f()的定义如上所述
f(1, 2, d="Python", c=4.2)  # 输出 a = 1, b = 2, c = 4.2, d = Python
f(1, b=3, "Python", d=4.2)  # 会报错,因为位置实参位于关键字实参后面了。
7.2.2带默认值的形参

形参也可以设置默认值,但所有 带默认值的形参必须是最后几个 。当某些形参没有被初始化时,这些形参会使用默认值。例如:

def f(a, b, c=3, d="Python"):print("a =", a, end=", ")print("b =", b, end=", ")print("c =", c, end=", ")print("d =", d)f(1, 2)  # c和d没有被初始化,采用默认值。输出 a = 1, b = 2, c = 3, d = Python
f(1, b=2, d="hello")  # c没有被初始化,采用默认值。输出 a = 1, b = 2, c = 3, d = hello

7.3变量的作用域

函数内定义的变量为局部变量,只能在函数内部使用。当需要修改用全局变量时,需要用 global关键字 在函数内声明全局变量。例如:

x = 1def fun():global x  # 在函数内部声明全局变量x = 666y = 999print(x, y)fun()  # 输出:666 999
print(x) #发现x变成了666,说明定义在外面的全局变量x也能在函数内部修改了
#print(y) #报错

7.3函数嵌套

函数内部也可以定义函数。例如:

def fun1():def fun2(x):x += 1print(x)fun2(5) #调用fun2函数fun1() #输出6

7.4pass语句

同循环语句一样,当我们还没有想好怎么实现这个函数的时候,可以写个pass语句,之后再来实现这个函数。

7.5函数的参数传递

7.5.1值传递

int、float、bool、字符串等采用值传递。 将实参的初始值拷贝给形参。此时,对形参的改动不会影响实参的初始值。例如:

def fun(y):y = 5print(y)x = 10
fun(x)
print(x) # x还是10,不会改变
7.5.2引用传递列表采用引用传递。

类似于C语言中的传地址,C++中的引用(&);列表采用引用传递。 将实参的引用传给形参,此时对形参的修改会影响实参的初始值。例如:

def fun(x):for i in range(len(x)):x[i] += 1a = [1, 2, 3, 4]
fun(a)
print(a) # a的内容会发生改变为[2, 3, 4, 5]

7.6函数return语句

return语句终止当前正在执行的函数并将控制权返回到调用该函数的地方,并返回结果。 与C++不同的是,python的返回值可以有多个。 例如:

def f(x):if x == 1:return  # 不写返回值时,会返回Noneif x == 2:return 3  # 返回一个变量if x == 3:return 4, 5  # 返回多个变量a = f(1)
b = f(2)
c, d = f(3)
e = f(4)  # 没写return时,也会返回None
print(a, b, c, d, e)  # 输出 None 3 4 5 None

7.7函数lambda表达式

lambda关键字可以创建匿名函数,目的是为了简化代码。可以对比下面两种写法,会发现lambda表达式的写法更短一些。常与sort()函数配合使用,例如:

我们本来可能会在调用函数的时候,给函数再传递一个函数,例如:

def fun1(a, b, g):g()return a + bdef fun2():print("hello world")s = fun1(3, 4, fun2)
print("s =", s)

在这里插入图片描述
但是,我们使用lambda就可以写的更简洁了。效果等同

def fun1(a, b, g):g()return a + bs = fun1(3, 4, lambda: print("hello world"))
print("s =", s)

7.8函数递归

递归讲求在一个函数内部,也可以调用函数自身。这种写法被称为递归。写递归函数可以从集合的角度来思考。理解递归函数的执行顺序可以用树的形式来思考。例如,求解斐波那契数列第 n 项可以采用如下写法:

def fun(n):if n <= 2:return 1return fun(n-1) + fun(n-2)print(fun(10))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/616144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot+vue的网上花卉商城系统(Java毕业设计)

大家好&#xff0c;我是DeBug&#xff0c;很高兴你能来阅读&#xff01;作为一名热爱编程的程序员&#xff0c;我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里&#xff0c;我将会结合实际项目经验&#xff0c;分享编程技巧、最佳实践以及解决问题的方法。无论你是…

「 网络安全术语解读 」点击劫持Clickjacking详解

引言&#xff1a;要想深入理解点击劫持攻击&#xff0c;我们需要先清楚iframe的用途及优缺点。 1. 关于iframe iframe是HTML语言中的一部分&#xff0c;通常用于在网页中嵌入其他网页的内容&#xff0c;如图像、视频、音频、链接等。它允许在一个网页中插入另一个网页&#xf…

高性能mysql 第三版 读书笔记

MySQL中的tmp_table_size和max_heap_table_size|极客笔记 mysql占用内存过高调优方法_tmp_table_size过大阻塞-CSDN博客 查看mysql分配的内存 mysql查看内存利用状态_mob6454cc6d81c9的技术博客_51CTO博客 https://www.cnblogs.com/stronger-xsw/p/13632505.html

国企石油化工单位任职资格体系搭建案例

传统的任职资格体系主要考虑年限、经验、资历等因素&#xff0c;部分企业在任职资格体系中也引入了能力指标&#xff0c;但是&#xff0c;实际管理过程中仍然存在很多问题&#xff1a;员工“熬年头”意识严重、工作积极性差、优秀人员因得不到晋升而流失、各方面能力都不错的人…

【一文详解】知识分享:(C#开发学习快速入门)

面向对象(OOP) c语言是面向过程。 c是面向过程面向对象。 c#是纯粹的面向对象: 核心思想是以人的思维习惯来分析和解决问题。万物皆对象。 面向对象开发步骤: 分析对象 特征行为关系(对象关系/类关系) 写代码: 特征–>成员变量 方法–>成员方法 实例化–具体对象 …

Python商业数据挖掘实战——爬取网页并将其转为Markdown

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 ChatGPT体验地址 文章目录 前言前言正则表达式进行转换送书活动 前言 在信息爆炸的时代&#xff0c;互联网上的海量文字信息如同无尽的沙滩。然而&#xff0c;其中真正有价值的信息往往埋…

ORA-12541:TNS:无监听程序

1.重新配置监听 找到监听程序配置&#xff0c;右键已管理员身份运行 选择第二个&#xff1a;重新配置 这个一般没什么好选的 默认选定的协议TCP&#xff0c;继续下一步 默认的否 继续下一步&#xff0c;完成监听重新配置 之后进行测试看能否连上 2.本地Net服务名配置 …

Arrow:在项目中进行时间处理的强大工具

目录 一、Arrow简介 二、安装与配置 三、基础功能与使用 1. 日期和时间格式转换 2. 时区处理 3. 时间序列分析 四、进阶应用与案例分析 五、性能与优化 六、最佳实践与经验分享 七、总结与展望 在处理日期和时间时&#xff0c;我们经常需要一个精确、可靠的库来帮助我…

【漏洞复现】锐捷EG易网关cli.php后台命令执行漏洞

Nx01 产品简介 锐捷EG易网关是一款综合网关&#xff0c;由锐捷网络完全自主研发。它集成了先进的软硬件体系架构&#xff0c;配备了DPI深入分析引擎、行为分析/管理引擎&#xff0c;可以在保证网络出口高效转发的条件下&#xff0c;提供专业的流控功能、出色的URL过滤以及本地化…

MySQL批量插入技巧

关于MySQL批量插入的一些问题 MySQL一直是我们互联网行业比较常用的数据&#xff0c;当我们使用半ORM框架进行MySQL大批量插入操作时&#xff0c;你是否考虑过这些问题: 进行大数据量插入时&#xff0c;是否需要进行分批次插入&#xff0c;一次插入多少合适&#xff1f;有什么…

Elasticsearch:Search tutorial - 使用 Python 进行搜索 (三)

这个是继上一篇文章 “Elasticsearch&#xff1a;Serarch tutorial - 使用 Python 进行搜索 &#xff08;二&#xff09;” 的续篇。在今天的文章中&#xff0c;本节将向你介绍一种不同的搜索方式&#xff0c;利用机器学习 (ML) 技术来解释含义和上下文。 向量搜索 嵌入 (embed…

【Python机器学习】深度学习——调参

先用MLPClassifier应用到two_moons数据集上&#xff1a; from sklearn.neural_network import MLPClassifier from sklearn.datasets import make_moons from sklearn.model_selection import train_test_split import mglearn import matplotlib.pyplot as pltplt.rcParams[f…

训练营第四十二天 | 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 ● 416. 分割等和子集

01背包问题 二维 代码随想录 dp二维数组 优化 01背包问题 一维 代码随想录 dp一维数组 416. 分割等和子集 把数组分成总和相等的两份&#xff0c;如果数组总和为奇数&#xff0c;不能分割&#xff0c;若有符合的数组子集&#xff0c;返回true 代码随想录 class Solution {p…

数据中心建设之——理解基于财务三大报表的BI指标体系搭建

目录 1.1 三张报表的作用 1.2 三张报表长的样子 1.2.1 资产负债表 1.2.2 利润表 1.2.3 现金流 1.3 BI指标构建 1.3.1 盈利能力指标构建 1.3.2 营运能力指标构建 1.3.3 偿债能力指标构建 转眼间&#xff0c;一年又悄然而逝&#xff0c;时光荏苒&#xff0c;岁月如梭 &a…

仓储|仓库管理水墨屏RFID电子标签2.4G基站CK-RTLS0501G功能说明与安装方式

随着全球智能制造进度的推进以及物流智能化管理水平的升级&#xff0c;行业亟需一种既能实现RFID批量读取、又能替代纸质标签在循环作业、供应链管理以及实现动态条码标签显示的产品。在此种行业需求背景下&#xff0c;我是适时推出了基于墨水屏显示技术的VT系列可视化超高频标…

JVM-JVM支持高并发底层原理精讲

一、透彻掌握高并发-从理解JVM开始 二、从线程的开闭看JVM的作用 1.run方法 启动start方法&#xff0c;会调用底层C方法&#xff0c;告诉操作系统当前线程处于可运行状态&#xff0c;而如果直接调用run方法&#xff0c;则就不是以线程的方式来运行了&#xff0c;只是当做一个普…

一套成熟的Spring Cloud智慧工地平台源码,自主版权,支持二次开发!

智慧工地源码&#xff0c;java语言开发的智慧工地源码 智慧工地利用移动互联、物联网、云计算、大数据等新一代信息技术&#xff0c;彻底改变传统施工现场各参建方的交互方式、工作方式和管理模式&#xff0c;为建设集团、施工企业、监理单位、设计单位、政府监管部门等提供一揽…

RabbitMQ(十)队列的声明方式

目录 1.编程式声明补充&#xff1a;RabbitTemplate 和 AmqpAdmin 的区别 2.声明式声明补充&#xff1a;new Queue() 和 QueueBuilder.durable(queueName).build() 的区别 背景&#xff1a; 在学习 RabbitMQ 的使用时&#xff0c; 经常会遇到不同的队列声明方式&#xff0c;有的…

酚醛胶面建筑模板 — 广西厂家直销,质保可靠

在现代建筑行业中&#xff0c;选择高质量的建筑板材对于确保施工质量和工程安全至关重要。广西厂家直销的酚醛胶面建筑板&#xff0c;以其卓越的质量和可靠的质保&#xff0c;成为了建筑行业的优选材料。 产品特性 卓越的耐候性&#xff1a;我们的酚醛胶面建筑板采用高品质酚醛…