Python学习简记
做题时遇到的不知道的知识点会更新在此:
python中的int()函数可以用于进制转换
该函数最为常见的使用是用于强制类型转换,实际上,它可以有两个参数
值得强调的是当传入两个参数时第一个参数一定要是字符串类型
字符串方法:
- lower()将字符串所有字符变为小写(非原地)
- upper()将字符串所有字符变为大写
- title()将字符串内每一个单词首字母大写
- capitlize()将首字母大写
- .swapcase()将字符串中的大写字符变成小写字符,小写字符变成大写字符
- strip()去除首尾空白字符
- lstrip()去除左边空白字符
- rstrip()去除右边空白字符
- 想重复输出某个字符串可以使用*号
- split()从字符串的左边开始切分,默认的切分参数(第一个)是空格,第二个参数可以选择指定切分次数,返回列表
- rsplit()从字符串的右边开始切分,其他同上
- isalpha()判断字符串是否只包含字母
- isalnum()判断字符串是否全部由字母和数字组成
- isdigit()判断字符串是否只包含数字
- isdecimal()判断字符串是否只包含十进制数字
- isnumeric()判断字符串是否只包含数字
- 注意s.isdigit、isdecimal 和 s.isnumeric 区别
- isspace()判断字符串是否只包含空格(回车、换行、水平制表符)
- .center()居中对齐,第一个参数指定宽度,第二个参数可以指定填充字符是什么(默认是空格,如果设定的宽度小于原字符串宽度则返回原字符串)
- .ljust()左对齐,参数同上
- rjust()右对齐,参数同上
- zfill()右对齐,只接受一个参数(指定宽度),默认使用0填充
- .isidentifier()判断指定的字符串是否是合法的标识符
- .encode()编码方法,可以指定编码的类型,传入参数即可
- .decode()解码方法,可以指定解码的类型
python内置函数del(注意与列表.del()区分)
- del 对象 直接删除一个对象
- 可用于列表删除一个(del lst[ j ])或多个元素(del lst[ 0:3 ]利用切分)
内置函数/方法
- max()参数为一个可迭代对象,得到其中的最大值
- min()同上,得到其中的最小值
- sum()第一个参数为一个可迭代对象,第二个参数为结果相加值(默认为0,即返回值会加上这个数),得到迭代对象的和
- abs()返回传入参数的绝对值
- ord()返回传入参数的ASCII码数值
- hex()返回传入十进制整数的十六进制(返回类型是字符串)
- bin()返回传入十进制整数的二进制(返回类型是字符串)
- pow(x,y)返回x^y
- .count() 统计列表中传入参数出现的次数
- .index(参数)得到传入参数在列表中第一次出现的下标是多少(从0开始)(未找到则报错)
- .find()查找传入参数在序列中的索引下标(未找到返回-1)
- string.join(iterable)
join() 方法获取可迭代对象中的所有项目,并将它们连接为一个字符串。
必须将字符串指定为分隔符
.replace(old,new,max)可将字符串中的某些字符替换为其他字符,第一个参数是原字符,第二个参数是新字符,第三个参数是替换次数(默认替换全部),注意该函数不是原地替换
round(num,dig)
函数返回一个浮点数,该浮点数是指定数字的舍入版本,并带有指定的小数位数。
默认的小数位数为 0,表示该函数将返回最接近的整数。
eval()函数计算指定的表达式,如果该表达式是合法的 Python 语句,它会被执行。
set(序列集合或迭代器)函数创建集合对象。集合列表中的项目是无序去重的,因此它将以随机顺序出现。
hasattr(obj,name)函数用于判断对象是否包含对应的属性
setattr(obj,name,value)函数用于设置属性值,如果该对象已经拥有该属性值则对其进行修改,如果没有该属性,则创建该属性后对其赋值
dir(对象)可以查看某个对象所拥有的属性和方法
常用数据类型
整数类型int
- 二进制以0b开头
- 八进制以0o开头
- 十六进制以0x开头
这里还有一个值得注意的点:python中的整型是“无限长”的,因此它可以表示任何数
浮点数
python中只有float作为浮点数,没有double
主要注意python中对浮点数与Decimal的关系,例如:
可参考
布尔类型
有True和False两种,其中要注意的是python的bool可以作为数字进行运算
例如:
True+1=2False+1=0
字符串类型
可以用一对单引号或一对双引号或三个单引号对或三个双引号对 表示
其中三引号表示的字符串可以跨行输入,其他的则不行
三引号还可以实现多行注释
对于字符串想要输出原字符串可以在字符串前加上r或R
print(r'我是字符串')
但是注意 想输出的字符串末尾不能是反斜杠,因为如果末尾是反斜杠就变成了\'即一个已经存在的转义字符
类型转换
float()
int()
str()
bool()(字符串转成bool类型都是True)
运算符
python中没有++运算符和--运算符
python的整除是//
而 / 则会得到浮点数
幂运算是**
赋值上python可以支持解包赋值,即类似
a,b,c=1,2,3; #这样就完成了a=1,b=2,c=3的赋值
对象id(地址)的比较可以使用is和is not
python的布尔运算符有and,or,not,in,not in
python的位运算符有&,|,<<,>>
其中<<是“高位溢出舍弃,低位补零” >>是“低位溢出舍弃,高位补零”
条件表达式
x if 判断条件 else y
即如果判断条件返回True则得到x,反之得到y
pass语句
在遇到暂时不想写的地方时可以使用pass语句进行略过
分支结构
if 判断条件:语句 elif 判断条件:语句 else:语句
内置函数range
该函数用于生成一个整数序列
我们有如下三种方法对其进行创建
该函数的返回值是一个迭代器对象
循环
while循环
#语法结构 while 表达式:语句
for-in循环
in表达从(字符串、序列等)以此取值,称为遍历
for-in遍历的对象必须是可迭代对象
#语法结构 for 自定义的变量 in 可迭代对象:循环体
如果不需要上述的自定义变量可以使用'_'代替该位置
循环与else
在python中,else可以与循环搭配使用
即一个循环如果正常退出则执行else语句内容
列表
python中的列表可以相当于其他语言中的数组
![]()
上图可近似抽象表示一个列表的内存形式
列表的创建方式:
- 直接使用中括号创建
- 使用内置函数list()
列表的特点:
- 列表元素按照顺序有序排序
- 索引映射唯一一个元素
- 列表可以存储重复数据
- 列表可以任意数据类型混合存储
- 列表会根据需要动态分配和回收内存空间
列表的查询操作
这里值得强调的是切片得到的列表与原列表的id是不同的,说明新的列表是拥有了新的内存空间,此外,切片三个参数中的中间参数不管是正序遍历还是逆序遍历都是“开的一边”,即不会遍历的stop本身
列表元素的增加操作
值得强调的是append()方法是“原地添加元素”,extend()方法适用于两个列表的拼接(也是原地拼接)
此外,切片也是一种灵活的方式
输出如下
等于是在下标为>=1的后面所有元素都变了
列表的删除操作
- remove()(根据元素值删除)
- 一次删除一个元素
- 重复元素只删除第一个
- 元素不存在则抛出异常
2.pop()(根据索引进行删除)
- 删除一个指定索引位置上的元素
- 指定索引不存在则抛出异常
- 如果不指定索引则默认删除最后一个元素
3.切片
- 可实现一次至少删除一个元素
但是这样不是原地操作,最好的做法如下:
4.clear()
- 清空列表
5.del()
- 直接删除列表
列表元素的修改操作
- 直接通过索引修改(单个元素)
- 切片
![]()
列表元素的排序
- 调用列表的sort()方法,默认将列表进行升序排序,如果指定参数reverse=True,则可实现降序排序(该方法是原地排序)
- 调用内置函数sorted(),同理可传入参数reverse=True实现降序排序(会产生新列表)
列表产生式
列表产生式是用于生成列表的公式
补充列表的另外一些常用方法:
- reverse() 实现原地反转列表
字典
什么是字典?
与列表一样,字典也是python的一种数据结构,它以键值对的形式存储数据
此外字典是可变序列,即我们可以对其中的元素进行增删改
字典是无序的,即添加的第一个元素不一定被放在第一个位置,添加的第二个元素也不一定在第二个位置,这是因为元素的位置是由字典的key经过哈希函数的结果来决定的,所以也会要求字典的key是不可变序列(类似字符串就是不可变序列)来避免元素的位置被频繁改变
值得一提的是字典也可以根据需要动态地伸缩
不过字典会浪费较大的空间,是一种空间换时间的数据结构
字典的创建
主要有以下两种方式:
- 使用花括号
- 使用内置函数dict()
注意使用内置函数dict()内部是用等号'='进行赋值的不是冒号
字典元素的获取
主要有以下两种方式:
- 使用中括号[]取值
![]()
- get()方法取值
上述二者的区别:
字典key的判断
字典元素的删除
- 使用.clear()方法可直接清空字典
- 使用内置函数删除即可
del 字典['张三']
字典元素的添加与修改
该操作较为简单,有点类似访问其中的元素操作
获取字典视图
- .keys()方法获取字典中所有的key
- .values()方法获取字典中所有的value
- .items()方法获取字典中所有的键值对
这里还可以将上述得到的序列使用list()转换为列表方便操作
字典元素的遍历
当然使用上述提到的字典视图也可以实现遍历
内置函数zip()
该函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个元组,然后返回由这些元组组成的列表
例如
如上两个列表使用zip(items,prices)所得到的为
[('Fruits',96),('Books',78),('Others',85)]
字典产生式
具体语法如下图所示
元组
元组是python中内置的数据结构之一,是一个不可变序列,即元组不能被增删改
补充:
截至目前所学的不可变序列出现了有 字符串、元组,这些不可变序列如果进行了增删改就相当于直接修改了地址创建了一个新的对象,反之可变序列 列表、字典进行增删改操作对象地址并不会改变
语法如下图所示
元组的创建方式
主要包含如下两种方式:
- 直接小括号
需要强调的是 只包含一个元素的元组需要使用逗号和小括号
- 使用内置函数tuple()
需要强调的是tuple()函数内还需要使用小括号
实际上,元组的小括号是可以省略的
需要强调的是:
元组中存放的是对象的引用
如果说元组中的对象本身是不可变对象,则不能再引用其他对象‘
如果说元组中的对象本身是可变对象,则可变对象的引用不能被修改,但是可变对象的数据可以修改
元组的遍历
而关于元组元素的查看 则直接使用索引下标即可
此外想输出元组内的多个元素也可以使用切片操作,不过需要注意的是元组的切片也是使用的中括号
集合
集合也是python所提供的内置数据结构之一,并且它属于可变无序序列,我们通常使用“没有value的字典”来理解它,也就是说集合中的元素不能重复
集合的创建
- 使用{}创建
- 使用内置函数set()
集合元素的判断操作
类似其他数据结构,直接使用in与not in 判断元素是否存在集合中即可
集合元素的新增操作
- .add()方法,一次添加一个元素
- .update()方法,一次添加一个或多个元素(参数是可迭代对象)
集合的删除操作
- .remove() 一次删除一个指定元素,如果元素不存在则抛出异常
- .discard()同上一次删除一个指定元素,但是如果元素不存在不会报错
- .pop()该方法无参数,它会随机删除集合中的一个元素
- .clear()该方法用于清空集合
集合之间的关系
值得强调的点是这个isdisjoint()方法,该方法如果两个集合没有交集返回True,反之返回False
集合的数学操作
- 交集 使用.intersection()方法可以返回两个集合的 交集
- 此外 还可以使用 & 符号得到两个集合的 交集
- 并集 使用.union()方法可以得到两个集合的 并集
- 此外 还可以使用 | 符号得到两个集合的 并集
- 差集 使用.difference()方法可以得到两个集合的 差集
- 此外还可以使用 - 符号得到两个集合的差集
- 对称差集 使用.symmetric_difference()可以得到两个集合的 对称差集
- 此外还可以使用 ^ 符号得到
集合生成式
将列表生成式的中括号改为花括号即可
学了这么多生成式,我们需要注意的是元组没有生成式
python内置数据结构总结
字符串
字符串的驻留机制
什么是字符串的驻留机制?
python对字符串仅保留一份相同且不可变的方法,不同的值被保留在字符串的驻留池内,python对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量
什么样的字符串会被驻留
- 字符串的长度为0或1时
- 符合标识符的字符串
- 字符串只在编译时进行驻留,而非运行时
- [-5,256]之间的整数数字
python还提供了方法允许我们对字符串进行强制驻留
即可以使用sys中的intern方法强制两个字符串指向同一对象
这里需要注意的是pycharm对字符串进行了优化,即可能不满足上述条件的字符串也会被驻留
字符串的比较操作
字符串与字符串之间其实可以使用类似
这些运算符进行比较
- 比较规则:
- 首先比较两个字符串的第一个字符,如果相等就继续比较下一个字符串,以次比较下去,直至两个字符串中的字符不相等,其比较结果就是两个字符串的比较结果,此后后续字符不再进行比较
- 比较原理:
- 两个字符进行比较时调用的是内置函数ord()所得到的值
值得强调的是==符号比较的是字符串的内容
而 is 运算符比较的是字符串的地址id
字符串的切片
与其他数据类型相似,字符串也能进行切片操作
但是,因为字符串是不可变类型,不具备增删改操作,切片操作将产生新的对象
字符串的格式化
对字符串进行格式化主要有一下两种方式:
1.%作为占位符
这一点与C语言中完全一样,这里不再赘述
2. {}作为占位符
如上图所示的0与1分别代表format参数的第一个参数与第二个参数
补充:
上图中如果format中只有一个参数那么可以省略0
函数
函数就是执行和完成特定功能的一段代码
函数的好处:
- 复用代码
- 隐藏实现细节
- 提高可维护性
- 提高可读性便于调试
函数的创建
函数的参数传递
主要有如下两种方式:
1.位置实参
根据形参对应的位置进行实参传递
2.关键字实参
根据形参名称进行实参传递
函数参数传递的内存分析
如上图代码所示,我们定义了一个函数fun,且传入两个参数,分别时不可变类型int与可变类型list,我们发现在调用fun后n1还是n1,但是列表n2却被改变了
- 如果参数是不可变对象,在函数体内的修改不会影响实参的值
- 如果是可变对象,则在函数体内会影响实参的值
函数的返回值
- 如果函数没有返回值,return可以省略不写
- 函数的返回值如果存在多个,返回的类型为元组
默认值参数
函数定义时,我们可以给形参设置默认值,如果不希望使用默认值时则可以传递实参,反之不传实参则默认使用默认值
个数可变的函数参数
主要有以下两类:
1.个数可变的位置参数
定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的位置参数
使用*定义个数可变的位置形参
结果为一个元组
2.个数可变的关键字形参
定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的关键字参数
使用**定义个数可变的关键字形参
结果为一个字典
值得强调的是,如果一个函数的形参既有个数可变的位置形参也有个数可变的关键字形参,那么我们定义 位置形参 放在 关键字形参前面
函数传参时的解包
只需在传实参时在前面加上对应的星号即可
变量的作用域
即程序代码能访问该变量的区域
根据变量的有效范围可分为:
- 局部变量
- 在函数内部定义的变量,只在函数内部有效,但如果局部变量使用global声明,这个变量就会成为全局变量
- 全局变量
- 在函数体外定义的变量,可作用于函数内外
异常
python与其它高级程序语言一样提供了异常处理机制,可以在异常出现时进行捕获,然后内部“消化”,让程序继续运行
try....except....else....finally语句
如上图所示,我们可以使用这样的语句来实现捕获异常,在try子句内编写可能会出现异常的语句块,except后书写异常类型,然后在except语句块内编写如果出现该异常需要执行的代码
当然我们可以书写多个except语句,如果书写多个except语句的话,我们希望从上到下按照异常的范围大小,从小到大排下来,这样我们更能精确地处理异常
其次上述语句也可以补充使用else语句,else语句块的内容表示,如果try语句块中未出现异常所需要执行的代码
最后,我们还可以添加finally语句块,该语句块无论是否发生异常都会被执行,通常用来释放try语句块中申请的资源
常见异常类型如下图所示
类与对象
![]()
值得注意的一点是
实例对象的创建一般有两种形式
stu.info() Student.info(stu)
类属性、类方法、静态方法
需要强调的是类方法与静态方法的区别
类方法:
类方法和实例方法相似,它最少也要包含一个参数,只不过类方法中通常将其命名为 cls,Python 会自动将类本身绑定给 cls 参数(注意,绑定的不是类对象)。也就是说,我们在调用类方法时,无需显式为 cls 参数传参。
其次,类方法只能访问类属性
类方法推荐使用类名直接调用,当然也可以使用实例对象来调用(不推荐)
Student.cm() stu.cm()#不推荐
静态方法:
静态方法,其实就是我们学过的函数,和函数唯一的区别是,静态方法定义在类这个空间(类命名空间)中,而函数则定义在程序所在的空间(全局命名空间)中
静态方法没有类似 self、cls 这样的特殊参数,因此 Python 解释器不会对它包含的参数做任何类或对象的绑定。也正因为如此,类的静态方法中无法调用任何类属性和类方法静态方法的调用,既可以使用类名,也可以使用类对象
动态绑定属性和方法
python是一门动态语言,在对象创建后,允许动态地绑定属性和方法
面向对象的三大特征
封装
封装可以提高程序的安全性,封装即将属性和方法包装到类对象中,在方法内部对属性进行操作,在类的外部调用方法
需要强调的是,在python中没有专门的修饰符用于表示属性的私有,我们通常在我们希望的私有成员前面使用两个下划线_
继承
继承可以很好地提高代码的复用性
python中的继承语法格式如下
如果一个类没有继承任何类则,默认继承object
python支持多继承,即一个子类可以有多个父类
定义子类的构造方法时,必须在其中调用父类的构造方法(利用super())
![]()
多态
多态可以提高程序的可扩展性和可维护性
![]()
![]()
方法重写
- 如果子类对继承自父类的某个属性或方法不满意,可以在子类中对其进行重新编写
- 子类重写的方法中也可以通过super().xxx调用父类的方法
object类
- object类是所有类的父类,因此所有类都有object类的属性和方法
- object类中存在一个__str()__方法,用于返回一个对象的描述,我们通常会将其重写使其返回更加确切的类描述
如上图所示,如果我们没有重写__str__方法则print(p)会输出该对象的地址,反之则输出了我们重写方法__str__返回的内容
object的一些属性
- x.__dict__ 如果x是一个实例对象的话,那么返回实力对象的属性字典,如果x是一个类名则返回该类的属性与方法的字典
- x.__class__ 返回对象所属的类
- x.__bases__ 返回一个元组包含x的父类
- x.__mro__ 返回一个元组包含类的层次结构
- x.__subclasses__ 返回子类的列表
object的一些方法:
- __add__(self,other) 类似C++实现了类与类之间的运算符操作一样,如果我们想使得两个类可以相加,我们就需要实现它
- __len__(self)同理,如果我们想要得到len(类),那么我们需要在该类中实现该方法
- __new__(cls,其他参数) 与 __init__(self) 中前者用于创建对象,后者则用于初始化前者创建的对象,具体可参考通俗的讲解Python中的__new__()方法
值得强调的是发现__new__方法是传入类(cls),而__init__方法传入类的实例化对象(self),而有意思的是,__new__方法返回的值就是一个实例化对象(ps:如果__new__方法返回None,则__init__方法不会被执行,并且返回值只能调用父类中的__new__方法,而不能调用毫无关系的类的__new__方法)
类的浅拷贝与深拷贝
- 变量的赋值操作:实质上是形成两个变量指向同一个对象
- 浅拷贝:使用copy模块中的copy方法,python中的拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此源对象与拷贝对象会引用同一个子对象
- 深拷贝:使用copy模块中的deepcopy方法,递归拷贝对象中包含的子对象,源对象与拷贝对象中的所有子对象均不同
如上图所示,我们发现computer对象与浅拷贝对象computer2是不同的对象,但是他们的子对象都是相同的
上图则使用了深拷贝,我们发现源对象与拷贝对象都不同,包括他们的子对象
模块Modules
我们可以简单将模块理解为一个.py文件就是一个模块
而一个模块会包含函数、类、语句
使用模块的好处:
- 方便其他程序或脚本的导入并使用
- 避免函数名和变量名的冲突
- 提高代码的可维护性
- 提高代码的可重用性
- 有利于团队协作开发
模块的导入
我们在自定义模块时,名称尽量不要与python自带的标准模块名称相同
导入模块的方式有如下两种:
此外第三方模块的导入
以主程序形式运行
简单地说,就是我们的模块中因为可以包含语句例如print,因此在我们导入某个模块运行时,该模块的语句也会被执行,如果我们不希望它被执行,就在该语句加上if __name__ == __name__即可
包
- 包是一个分层次的目录结构,它将功能相近的模块整合到一个目录下
- 包使得我们的代码更为规范,避免了模块名称的冲突
- 包在创建时通常会包含__init__.py文件,而目录不会
值得强调的是,使用import进行导入,后面只能跟包或者是模块
但是使用from...import...可以导入包、模块、函数、类
python中常用的内置模块
文件
文件的读写原理如下图所示
.py文件被解释器所运行,而解释器会用到操作系统中的资源进行相关操作
使用python中的文件相关函数来实现对文件的操作
一般分为以下步骤
- 获取文件对象
- 对文件对象进行操作
- 关闭文件对象
- 内置函数open()创建文件对象
语法规则如下图所示
常用的文件打开方式
按照文件的数据组织形式,文件分为以下两类
- 文本文件:存储的是普通’字符‘文本,默认为unicode字符集,可以用记事本打开
- 二进制文件:把数据内容用’字节‘进行存储,无法用记事本打开,例如MP3,jpg图片
文件对象的常用方法
值得强调的是flush与close的区别
close()关闭流对象,但是先刷新一次缓冲区,关闭之后,流对象不可以继续再使用了。
flush()仅仅是刷新缓冲区(一般写字符时要用,因为字符是先进入的缓冲区),流对象还可以继续使用
with语句(上下文管理器)
- with语句可以自动管理上下文资源,无论说明原因跳出with块,都能确保文件的正确关闭,以此来达到释放资源的目的
- 该语句可以避免遗忘关闭文件的行为
上图是一个利用with语句实现copy功能的代码
相关文章:

Python学习简记
做题时遇到的不知道的知识点会更新在此: python中的int()函数可以用于进制转换 该函数最为常见的使用是用于强制类型转换,实际上,它可以有两个参数 值得强调的是当传入两个参数时第一个参数一定要是字符串类型 字符串方法: lower(…...

windows搭建一个FTP服务器超详细
一.场景: 在开发过程中需要FTP文件上传下载功能,需要在本地或者服务器上搭建一个FTP服务器。 二.详细步骤: 1. 安装FTP服务器支持和配置IIS web服务器 打卡“启动关闭Window功能” 控制面板>程序>启动或关闭Windows功能 或者选择快…...

u01使用率100%报错归档满的问题
今天下午客户报数据库无法连接了,我也立刻登录查看 因为显示orcl1归档满了,我就登录查看磁盘组的空间,发现空间空余很多 就sqlpus登录了,发现u01使用率满了 [oracledb1 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 …...

Packet Tracer - 配置扩展 ACL - 场景 2
Packet Tracer - 配置扩展 ACL - 场景 2 拓扑图 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 RTA G0/0 10.101.117.49 255.255.255.248 不适用 G0/1 10.101.117.33 255.255.255.240 不适用 G0/2 10.101.117.1 255.255.255.224 不适用 PCA NIC 10.101…...

最近面了12个人,发现这个测试基础题都答不上来...
一般面试我都会问一两道很基础的题目,来考察候选人的“地基”是否扎实,有些是操作系统层面的,有些是 python语言方面的,还有些… 深耕IT行业多年,我们发现,对于一个程序员而言,能去到一线互联网…...

JAVA基于Springboot框架的停车场管理系统开发实践和实现【附源码】
运行环境: jdk1.8idea/eclipsemaven3mysql5.6 项目技术: Java,Springboot,mybatis,mysql,jquery,html 该系统为停车场管理人员提供了对停车场中车辆,车位和财务的管理。操作员可以灵活地使用相关权限开展工作。在车位管理,车辆的停放和驶离、缴费&a…...

[230501] 4月29日考试真题第一篇|Temporary Pools
题目来源:http://t.csdn.cn/goCDT 正确率:6/10 目录 Temporary Pools 题目 Temporary Pools Paragraph 1: Temporary pools are freshwater habitats that retain water for only three to four months of the year or even shorter pe…...
Qt中QString, int等数据转换以及Qt与Halcon联编程序打包
一、Qt中QString, int等数据转换 在QT中,数值类型转为字符串类型,一般是可以使用 QString::number(); 示例: int num = 65; QString ab = QString::number(num); 其实还可以转为不同的进制字符串,比如 int num = 65; QString ab = QString::number(num,10); //十进…...

Android FlexboxLayout布局
FlexboxLayout 布局 一、简介二、使用三、功能详解FlexboxLayout属性flexWrapflexDirectionalignItemsjustifyContentalignContentdividerDrawableHorizontal、showDividerHorizontaldividerDrawableVertical、showDividerVerticaldividerDrawable、showDividermaxLine Flexbox…...
GNU编码标准(七)发布过程 相关内容摘录
仅对第7章The Release Process的内容进行摘录。 文章目录 7 发布过程7.1 configure应该如何工作7.2Makefile公约7.2.1 Makefile的一般公约7.2.2 Makefiles中的实用程序7.2.3 指定命令的变量7.2.4 DESTDIR:支持分阶段安装7.2.5 安装目录的变量7.2.6 用户标准目标7.2…...

DX算法还原
早在之前作者就写过一篇关于顶象的滑块验证,潦潦草草几句话就带过了。 出于互相学习的想法,给了一个大学生,奈何不讲武德把源码甩群里了,虽然在大佬们眼里不难, 不过拿着别人的东西乱传还是不太好。自认倒霉…...
多媒体API
私人博客 许小墨のBlog —— 菜鸡博客直通车 系列文章完整版,配图更多,CSDN博文图片需要手动上传,因此文章配图较少,看不懂的可以去菜鸡博客参考一下配图! 系列文章目录 前端系列文章——传送门 后端系列文章——传送…...

免费矢量图标网站有哪些?
图标作为UI设计的必要元素,矢量图标是质量的保证。据说完美的用户体验应该从灵活性开始 。在响应设计盛行的当下,灵活矢量图标的重要性不言而喻。在这种情况下,风格齐全、质量上乘的矢量图标网站堪称设计宝藏。在这篇文章中,我们…...

基于Redis的分布式限流详解
前言 Redis除了能用作缓存外,还有很多其他用途,比如分布式锁,分布式限流,分布式唯一主键等,本文将和大家分享下基于Redis分布式限流的各种实现方案。 一、为什么需要限流 用最简单的话来说:外部请求是不可…...

权限提升:漏洞探针.(Linux系统)
权限提升:漏洞探针. 权限提升简称提权,由于操作系统都是多用户操作系统,用户之间都有权限控制,比如通过 Web 漏洞拿到的是 Web 进程的权限,往往 Web 服务都是以一个权限很低的账号启动的,因此通过 Webshel…...

python-11-多线程模块threading
python使用多线程实例讲解 1 进程和线程 1.1 进程和线程的概念 进程(process)和线程(thread)是操作系统的基本概念。 进程是资源分配的最小单位,线程是CPU调度的最小单位。 线程是程序中一个单一的顺序控制流程,进程内一个相对独立的、可调度的执行单…...

动态gif图片如何在线做?轻松实现图片在线生成gif
常见的jpg、png格式的静态图片想要变成gif格式的动态图片时,要怎么办呢?有没有什么简单实用的gif制作工具呢? 一、什么工具能够在线制作gif? GIF中文网作为一款专业的gif制作(https://www.gif.cn/)工具&a…...

浅谈联网汽车安全漏洞
“智能网联汽车存在内生共性问题,即软硬件的漏洞后门,基于此进行的网络攻击可以直接带来勒索、盗窃、大规模车辆恶意操控风险,还有数据泄露等网络安全事件。如果内生的漏洞后门问题不解决,系统自身难保,很难谈系统安…...

深入理解SeaTunnel:易用、高性能、支持实时流式和离线批处理的海量数据集成平台
深入理解SeaTunnel:易用、高性能、支持实时流式和离线批处理的海量数据集成平台 一、认识SeaTunnel二、SeaTunnel 系统架构、工作流程与特性三、SeaTunnel工作架构四、部署SeaTunnel1.安装Java2.下载SeaTunnel3.安装连接器 五、快速启动作业1.添加作业配置文件以定义…...

项目上线 | 兰精携手盖雅工场,数智驱动绿色转型
近年来,纺织纤维行业零碳行动如火如荼。作为低碳环保消费新时尚引领者,同时也是纤维领域隐形冠军,兰精在推进绿色发展的同时,也在不断向内探索企业数字化转型之道,以此反哺业务快速扩张。 数智转型,管理先…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
全面解析各类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…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...