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

Python之变量与数据类型总结

        前言

一、基本数据类型

1、整数(int)

2、浮点数(float) 

3、布尔值(bool)

4、字符串(str)

二、复合数据类型

1、列表(list)

1.1、列表基础

1.1.1、列表的创建

1.1.2、常用方法详解

2、元组(tuple)

2.1、元组的创建方法 

2.2、元组常用方法示例

2.3、元组的不可变性与特例

2.4、综合示例

3、字典(dict)

3.1、字典的创建方法

3.2、字典的常用方法

3.3、综合应用

4、集合(set)

4.1、集合的创建

4.2、集合的常用方法

三、特殊数据类型

四、类型之间的转换

1、显式转换函数

2、隐式转换场景

五、核心函数与方法

1、通用函数

2、字符串操作

3、容器操作

六、实际应用场景

1、用户输入处理

2、数据清洗

七、重要转换规则表


前言

这部分内容之前写过,但感觉不是特别好,不方便以后翻阅,所以重新整理。有问题欢迎随时指正。

一、基本数据类型

1、整数(int)

  • 表示整数,如10-5
  • 示例:
int_var = 10
print(f"整数: {int_var}, 类型: {type(int_var)}")  # 输出: 整数: 10, 类型: <class 'int'>

2、浮点数(float) 

  • 表示小数,如3.14-0.5
  • 示例:
float_var = 3.14
print(f"浮点数: {float_var}, 类型: {type(float_var)}")  # 输出: 浮点数: 3.14, 类型: <class 'float'>

3、布尔值(bool)

  • 表示真或假,只有两个值:TrueFalse
  • 示例:
bool_var = True
print(f"布尔值: {bool_var}, 类型: {type(bool_var)}")  # 输出: 布尔值: True, 类型: <class 'bool'>

4、字符串(str)

  • 表示文本,用单引号'或双引号"括起来。
  • 示例:
str_var = "Hello, World!"
print(f"字符串: {str_var}, 类型: {type(str_var)}")  # 输出: 字符串: Hello, World!, 类型: <class 'str'>

二、复合数据类型

1、列表(list)

  • 有序的可变集合,可以包含任意类型的元素。
  • 示例:
list_var = [1, 2, 3, "a", "b", "c"]
print(f"列表: {list_var}, 类型: {type(list_var)}")  # 输出: 列表: [1, 2, 3, 'a', 'b', 'c'], 类型: <class 'list'>
1.1、列表基础
1.1.1、列表的创建
  • 基础语法:

使用方括号 [] 直接定义元素,支持混合数据类型:

empty_list = []  # 空列表
number_list = [1, 2, 3, 4, 5]  # 数字列表
mixed_list = [1, "hello", 3.14, True]  # 混合类型列表
  • 构造函数 list()

将可迭代对象(如字符串、元组)转换为列表: 

char_list = list("hello")  # 输出 ['h', 'e', 'l', 'l', 'o']
tuple_to_list = list((1, 2, 3))  # 输出 [1, 2, 3]
  • range() 生成整数序列

快速生成连续整数列表:

list_range = list(range(5))  # 输出 [0, 1, 2, 3, 4]
list_step = list(range(1, 10, 2))  # 输出 [1, 3, 5, 7, 9]
  •  列表推导式

单行生成复杂列表,支持条件过滤: 

squares = [x**2 for x in range(5)]  # 输出 [0, 1, 4, 9, 16]
evens = [x for x in range(10) if x % 2 == 0]  # 输出 [0, 2, 4, 6, 8]
  •  使用 * 运算符重复元素

快速生成重复元素的列表: 

list9 = [0] * 5                 # [0, 0, 0, 0, 0]
list10 = ["hello"] * 3          # ['hello', 'hello', 'hello']
  • 嵌套列表(多维列表)

创建包含子列表的嵌套结构: 

matrix = [[1, 2], [3, 4]]       # 二维列表 → [[1,2], [3,4]]
1.1.2、常用方法详解
  • 添加元素 
    • append(obj):在列表末尾添加单个元素。
a = [1, 2, 3]
a.append(4)                   # 结果 → [1, 2, 3, 4]
a.append([5, 6])              # 添加子列表 → [1, 2, 3, 4, [5, 6]]
  • extend(iterable):将可迭代对象的元素逐个添加到列表末尾。
a = [1, 2, 3]
a.extend([4, 5])              # 结果 → [1, 2, 3, 4, 5]
a.extend("abc")               # 添加字符 → [1, 2, 3, 4, 5, 'a', 'b', 'c']
  • insert(index, obj):在指定索引位置插入元素。
a = [1, 2, 3]
a.insert(0, 0)                # 在索引0插入 → [0, 1, 2, 3]
a.insert(2, "x")              # 在索引2插入 → [0, 1, 'x', 2, 3]
  • 删除元素
    • remove(obj):删除第一个匹配的元素,无匹配时报错。
      • 特点

        • 按值删除:通过值(而非索引)查找并删除元素。

        • 仅删第一个匹配项:若有多个相同值,只删除第一个出现的。

        • 无返回值直接修改原列表,不返回被删除的值。

        • 异常风险:若值不存在,抛出 ValueError

fruits = ["apple", "banana", "cherry", "banana"]
fruits.remove("banana")  
print(fruits)  # 输出: ['apple', 'cherry', 'banana'](删除了第一个"banana")# 尝试删除不存在的值会报错
try:fruits.remove("mango")
except ValueError:print("值不存在!")  # 触发异常a = [1, 2, 3, 2]
a.remove(2)                   # 删除第一个2 → [1, 3, 2]
  • pop([index]):删除并返回指定索引的元素(默认最后一个)。 
    • 特点

      • 按索引删除:通过索引(而非值)定位元素。

      • 有返回值返回被删除的元素。

      • 默认删除最后一个:若未指定索引,默认 index=-1(最后一个元素)。

异常风险:若索引越界,抛出 IndexErrorclear():清空列表。clear():清空列表。

a = [1, 2, 3, 4]
a.pop()                       # 删除4 → 返回4,a变为[1, 2, 3]
a.pop(0)                     # 删除1 → 返回1,a变为[2, 3]numbers = [10, 20, 30, 40]# 删除最后一个元素
popped_element = numbers.pop()
print(popped_element)  # 输出: 40
print(numbers)         # 输出: [10, 20, 30]# 删除指定索引元素
popped_element = numbers.pop(1)
print(popped_element)  # 输出: 20
print(numbers)         # 输出: [10, 30]# 索引越界会报错
try:numbers.pop(5)
except IndexError:print("索引越界!")  # 触发异常

  • clear():清空列表
    • 特点

      • 无差别删除:一次性移除所有元素。

      • 无返回值:直接修改原列表,不返回任何内容。

      • 安全操作:不会因值或索引不存在而报错。

colors = ["red", "green", "blue"]
colors.clear()
print(colors)  # 输出: []

三种删除数据方式对比表格

方法操作依据返回值是否修改原列表异常场景典型用途
remove(obj)值(首个匹配)值不存在 → ValueError删除已知值的元素
pop([index])索引(默认-1)被删除的元素索引越界 → IndexError删除指定位置元素并获取其值
clear()快速清空列表
  •  排序与反转

1、sort(key=None, reverse=False):原地排序(默认升序)。

a = [3, 1, 4, 2]
a.sort()                      # 升序 → [1, 2, 3, 4]
a.sort(reverse=True)          # 降序 → [4, 3, 2, 1]

2、reverse():反转列表元素顺序。

a = [1, 3, 2]
a.reverse()                   # 结果 → [2, 3, 1]

3、sorted():返回新排序列表(原列表不变)

umbers = [5, 2, 9, 1, 7]
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # 输出: [1, 2, 5, 7, 9]
print(numbers)         # 原列表不变: [5, 2, 9, 1, 7]
  • 查找与统计

1、index(obj, [start, end]):返回第一个匹配元素的索引,无匹配时报错。

a = [10, 20, 30, 20]
print(a.index(20))            # 输出 1
print(a.index(20, 2))         # 从索引2开始查找 → 3

2、count(obj):统计元素出现的次数。

a = [1, 2, 2, 3, 2]
print(a.count(2))             # 输出 3
  • 复制与合并

1、copy():返回列表的浅拷贝。

a = [1, 2, 3]
b = a.copy()                  # b是a的独立副本
b.append(4)                   # a仍为[1,2,3],b为[1,2,3,4]

2、extend():用于将可迭代对象(如列表、元组、字符串、字典等)的元素逐个添加到列表的末尾。它直接修改原列表,不返回新列表

list1 = [1, 2, 3]
list1.extend([4, 5, 6])
print(list1)  # 输出: [1, 2, 3, 4, 5, 6]list2 = [1, 2, 3]
list2.append([4, 5, 6])
print(list2)  # 输出: [1, 2, 3, [4, 5, 6]]
  • 其他操作

1、len(list):获取列表长度。

a = [1, 2, 3]
print(len(a))                 # 输出 3

 2、切片操作:灵活截取子列表。

a = [0, 1, 2, 3, 4]
print(a[1:3])                 # 输出 [1, 2]
print(a[::-1])                # 反转 → [4, 3, 2, 1, 0]

2、元组(tuple)

元组是 不可变序列,用圆括号 () 定义,元素用逗号分隔。 

2.1、元组的创建方法 

 1、直接赋值法

# 空元组
t1 = ()# 单元素元组(必须加逗号)
t2 = (5,)
not_a_tuple = (42)            # 这是一个整数,不是元组# 多元素元组
t3 = (1, "apple", True, 3.14)# 省略括号(通过逗号自动识别为元组)
t4 = 1, 2, 3

2、tuple()构造函数

# 将列表转换为元组
list_to_tuple = tuple([1, 2, 3])# 将字符串转换为元组(每个字符为元素)
string_to_tuple = tuple("hello")  # 输出:('h', 'e', 'l', 'l', 'o')# 将字典键转换为元组
dict_keys_to_tuple = tuple({"name": "Alice", "age": 25})  # 输出:('name', 'age')

3、range()生成数值元组

# 生成10到18的偶数元组
num_tuple = tuple(range(10, 20, 2))  # 输出:(10, 12, 14, 16, 18)

 4、嵌套元组

nested_tuple = ((1, 2), (3, 4), (5, 6))

2.2、元组常用方法示例

1、访问元素与切片

t = ("apple", "banana", "cherry", "date")# 通过索引访问
print(t[0])          # 输出:apple
print(t[-1])         # 输出:date(负索引从末尾开始)# 切片操作
print(t[1:3])        # 输出:('banana', 'cherry')
print(t[::2])        # 输出:('apple', 'cherry')(步长为2)

2、查询方法

t = (1, 3, 5, 3, 7)# index():返回第一个匹配项的索引
print(t.index(3))    # 输出:1# count():统计元素出现次数
print(t.count(3))    # 输出:2# len():获取元组长度
print(len(t))        # 输出:5

3、拼接与重复

t1 = (1, 2)
t2 = ("a", "b")# 拼接元组
print(t1 + t2)       # 输出:(1, 2, 'a', 'b')# 重复元组
print(t1 * 3)        # 输出:(1, 2, 1, 2, 1, 2)

4、存在性判断

t = (10, 20, 30)# 检查元素是否存在
print(20 in t)       # 输出:True
print(99 in t)       # 输出:False

5、类型转换

# 元组转列表
list1 = list(t)# 列表转元组
tuple1 = tuple(list1)# 元组转字符串(需先转换为字符串列表)
str_list = [str(i) for i in t]
result = " | ".join(str_list)  # 输出:"10 | 20 | 30"

6、元组解包

x, y, z = (10, 20, 30)
print(x, y, z)  # 输出: 10 20 30

7、其他操作

# max() 和 min()
print(max(t))        # 输出:30
print(min(t))        # 输出:10# sorted() 返回排序后的列表
sorted_list = sorted(t)  # 输出:[10, 20, 30]

2.3、元组的不可变性与特例

1、不可变性:元组一旦创建,元素不可直接修改。 

t = (1, 2, 3)
# t[1] = 4  # 会报错:TypeError

2、特例:若元组包含可变对象(如列表),可修改嵌套对象。

t = ([1, 2], 3)
t[0][0] = 99  # 合法操作
print(t)      # 输出:([99, 2], 3)

2.4、综合示例

# 创建元组
student = ("Alice", 20, ("Math", 90, "Physics", 85))# 访问嵌套元素
print(f"姓名:{student[0]}, 年龄:{student[1]}")
print(f"数学成绩:{student[2][1]}, 物理成绩:{student[2][3]}")# 统计课程数量
courses = student[2]
print(f"课程总数:{len(courses) // 2}")  # 输出:2(每两元素为一门课程)# 计算平均分
scores = [courses[i] for i in range(1, len(courses), 2)]
average = sum(scores) / len(scores)
print(f"平均分:{average}")  # 输出:87.5

3、字典(dict)

3.1、字典的创建方法

字典以 键值对 形式存储数据,键必须是不可变类型(如字符串、数字、元组),值可以是任意类型。 

1、空字典创建

empty_dict = {}  # 使用大括号
empty_dict = dict()  # 使用dict()函数

 2、直接赋值创建

person = {'name': 'Alice', 'age': 30, 'city': '北京'}

3、关键字参数创建

student = dict(id=101, name='Bob', grade='A')

4、二元组列表转换

pairs = [('fruit', '苹果'), ('vegetable', '胡萝卜'), ('drink', '茶')]
food_dict = dict(pairs)  # {'fruit': '苹果', 'vegetable': '胡萝卜', 'drink': '茶'}

5、zip()函数组合

keys = ['x', 'y', 'z']
values = [10, 20, 30]
coordinates = dict(zip(keys, values))
print(coordinates)  # {'x': 10, 'y': 20, 'z': 30}

6、字典推导式

squares = {num: num**2 for num in range(1, 6)}  # 输出: {1:1, 2:4, 3:9, 4:16, 5:25}

7、fromkeys()方法

keys = ['a', 'b', 'c']
score_dict = dict.fromkeys(keys, 0)  # 输出: {'a':0, 'b':0, 'c':0}

8、混合列表处理

mixed_list = ['key1', 100, 'key2', 200, 'key3', 300]
mixed_dict = dict(zip(mixed_list[::2], mixed_list[1::2]))  # 输出: {'key1':100, 'key2':200, 'key3':300}

3.2、字典的常用方法

1、获取值:get(key, default=None)安全获取值,避免 KeyError

d = {'name': 'Alice', 'age': 25}
print(d.get('name'))       # Alice
print(d.get('gender'))     # None(键不存在)
print(d.get('gender', 'Unknown'))  # Unknown(返回默认值)

2、设置默认值:setdefault(key, default=None)若键存在则返回对应值;否则设置默认值并返回

d = {'name': 'Alice'}
print(d.setdefault('age', 25))  # 25(设置并返回)
print(d)  # {'name': 'Alice', 'age': 25}

3、更新字典:update(iterable)合并其他字典或键值对

d = {'name': 'Alice'}
d.update({'age': 25, 'city': 'Beijing'})
print(d)  # {'name': 'Alice', 'age': 25, 'city': 'Beijing'}dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
dict1.update(dict2)                     # 合并后: {'a':1, 'b':3, 'c':4}
merged_dict = dict1 | dict2             # Python 3.9+支持运算符合并

4、删除元素

1、pop(key, default):删除指定键并返回值,若键不存在可返回默认值。

d = {'name': 'Alice', 'age': 25}
age = d.pop('age')
print(age)  # 25
print(d)    # {'name': 'Alice'}

2、popitem():删除并返回最后插入的键值对(Python 3.7+ 有序)。

d = {'name': 'Alice', 'age': 25}
item = d.popitem()
print(item)  # ('age', 25)
print(d)     # {'name': 'Alice'}

5、清空字典:clear()清空所有键值对。

d = {'name': 'Alice'}
d.clear()
print(d)  # {}

6、获取键、值、键值对视图

keys()values()items():返回动态视图对象,实时反映字典变化。

d = {'a': 1, 'b': 2}
keys = d.keys()
values = d.values()
items = d.items()d['c'] = 3
print(list(keys))   # ['a', 'b', 'c']
print(list(values)) # [1, 2, 3]
print(list(items))  # [('a', 1), ('b', 2), ('c', 3)]

7、检查键是否存在

in 关键字:判断键是否在字典中。

d = {'name': 'Alice'}
print('name' in d)  # True
print('age' in d)   # False

8、复制字典

copy():创建字典的浅拷贝。

d1 = {'a': [1, 2]}
d2 = d1.copy()
d1['a'].append(3)
print(d2)  # {'a': [1, 2, 3]}(浅拷贝,嵌套对象共享引用)

9、遍历字典

d = {'name': 'Alice', 'age': 25}# 遍历键
for key in d:print(key)          # 输出 'name', 'age'# 遍历键值对
for key, value in d.items():print(f"{key}: {value}")  # name: Alice, age: 25

3.3、综合应用

# 创建字典
data = dict(zip(['a', 'b', 'c'], [1, 2, 3]))# 修改元素
data.update({'d': 4})# 安全访问
value = data.get('e', '默认值')# 遍历处理
for key, val in data.items():print(f"{key}的平方是{val**2}")# 清空字典
data.clear()

4、集合(set

4.1、集合的创建

集合是无序的、元素唯一的容器,用 {} 或 set() 创建。

1、使用花括号 {}

# 创建空集合
empty_set = set()  # 正确方式(注意:{} 默认创建空字典)
# empty_set = {}   # 错误!这实际上创建了一个空字典# 创建包含元素的集合
fruits = {"apple", "banana", "orange"}
numbers = {1, 2, 3, 4, 5}

2、使用 set() 构造函数

# 从列表创建集合
s3 = set([1, 2, 3, 4])
print(s3)  # 输出: {1, 2, 3, 4}# 从字符串创建集合(字符去重)
s4 = set("hello")
print(s4)  # 输出: {'h', 'e', 'l', 'o'}# 空集合必须用 set(),因为 {} 是空字典
empty_set = set()
print(empty_set)  # 输出: set()

3、使用集合推导式

s5 = {x for x in range(10) if x % 2 == 0}
print(s5)  # 输出: {0, 2, 4, 6, 8}

4.2、集合的常用方法

1、添加元素

s = {1, 2, 3}# add(): 添加单个元素
s.add(4)
print(s)  # 输出: {1, 2, 3, 4}# update(): 添加多个元素(可迭代对象)
s.update([5, 6, 7])
print(s)  # 输出: {1, 2, 3, 4, 5, 6, 7}

2、删除元素

s = {1, 2, 3, 4, 5}# remove(): 删除指定元素(元素不存在会报错)
s.remove(3)
print(s)  # 输出: {1, 2, 4, 5}# discard(): 删除指定元素(元素不存在不会报错)
s.discard(10)  # 无报错# pop(): 随机删除一个元素(集合为空会报错)
popped = s.pop()
print("被删除的元素:", popped)  # 例如输出: 1# clear(): 清空集合
s.clear()
print(s)  # 输出: set()

3、集合运算

a = {1, 2, 3}
b = {2, 3, 4}# 并集: a | b 或 a.union(b)
print(a.union(b))         # 输出: {1, 2, 3, 4}
print(a | b)              # 同上# 交集: a & b 或 a.intersection(b)
print(a.intersection(b))  # 输出: {2, 3}
print(a & b)              # 同上# 差集: a - b 或 a.difference(b)
print(a.difference(b))    # 输出: {1}
print(a - b)              # 同上# 对称差集(不同时存在的元素): a ^ b 或 a.symmetric_difference(b)
print(a.symmetric_difference(b))  # 输出: {1, 4}
print(a ^ b)                      # 同上

4、集合判断

a = {1, 2, 3}
b = {2, 3}# 子集判断: issubset()
print(b.issubset(a))     # 输出: True
print(b <= a)            # 同上# 超集判断: issuperset()
print(a.issuperset(b))   # 输出: True
print(a >= b)            # 同上# 是否不相交: isdisjoint()
c = {4, 5}
print(a.isdisjoint(c))   # 输出: True# in 和 not in:检查元素是否存在。
s = {1, 2, 3}
print(2 in s)    # True
print(4 not in s) # True

5、其他方法

s = {1, 2, 3}
copied_set = s.copy()  # 复制集合
print(len(s))   # 0

三、特殊数据类型

1、None(空值)

  • 表示没有值,常用于初始化变量或表示函数没有返回值。
  • 示例:
none_var = None
print(f"None: {none_var}, 类型: {type(none_var)}")  # 输出: None: None, 类型: <class 'NoneType'>

四、类型之间的转换

1、显式转换函数

1、int():将其他类型转换为整数。

print(f"int('10'): {int('10')}")  # 输出: int('10'): 10
print(f"int(3.14): {int(3.14)}")  # 输出: int(3.14): 3

 2、float():将其他类型转换为浮点数。

print(f"float(10): {float(10)}")  # 输出: float(10): 10.0
print(f"float('3.14'): {float('3.14')}")  # 输出: float('3.14'): 3.14

3、str():将其他类型转换为字符串。

print(f"str(10): {str(10)}")  # 输出: str(10): 10
print(f"str(3.14): {str(3.14)}")  # 输出: str(3.14): 3.14

4、bool():将其他类型转换为布尔值。

print(f"bool(0): {bool(0)}")  # 输出: bool(0): False
print(f"bool(1): {bool(1)}")  # 输出: bool(1): True

5、list():将其他类型转换为列表。

print(f"list('abc'): {list('abc')}")  # 输出: list('abc'): ['a', 'b', 'c']
print(f"list((1, 2, 3)): {list((1, 2, 3))}")  # 输出: list((1, 2, 3)): [1, 2, 3]

6、tuple():将其他类型转换为元组。

print(f"tuple([1, 2, 3]): {tuple([1, 2, 3])}")  # 输出: tuple([1, 2, 3]): (1, 2, 3)

7、dict():将其他类型转换为字典。

print(f"dict([('name', 'Alice'), ('age', 25)]): {dict([('name', 'Alice'), ('age', 25)])}")  # 输出: dict([('name', 'Alice'), ('age', 25)]): {'name': 'Alice', 'age': 25}

8、set():将其他类型转换为集合。

print(f"set([1, 2, 3]): {set([1, 2, 3])}")  # 输出: set([1, 2, 3]): {1, 2, 3}

2、隐式转换场景

# 运算自动提升
print(3 + 5.2)        # 8.2(int→float)
print(True + 5)       # 6(True→1)# 条件判断转换
if "non-empty":       # 自动转为Trueprint("条件成立")# 字符串拼接
print("Value: " + str(3.14))  # 必须显式转换数值

五、核心函数与方法

1、通用函数

# 类型检查
print(type(3.14))          # <class 'float'>
print(isinstance("text", (str, bytes)))  # True# 数学运算
print(abs(-5))             # 5
print(round(3.14159, 2))   # 3.14
print(divmod(10, 3))       # (3, 1)(商和余数)

2、字符串操作

text = "Python编程"# 常用方法
print(text.upper())          # PYTHON编程
print(text.find("thon"))     # 2(返回索引)
print(text.split("编"))      # ['Python', '程']
print(f"{3.1415:.2f}")       # 3.14(格式化)# 编码转换
byte_data = text.encode("utf-8")  # 字符串→bytes
new_str = byte_data.decode("utf-8")

3、容器操作

# 列表方法
nums = [5,2,7,1]
nums.sort()                   # 原地排序 [1,2,5,7]
nums.append(3)                # 添加元素
print(nums[::-1])             # 反转 [3,7,5,2,1]# 字典方法
user = {"name": "Alice", "age": 30}
print(user.get("email", "N/A"))  # 安全获取
user.update({"age":31, "city":"Paris"})# 集合运算
set_a = {1,2,3}
set_b = {3,4,5}
print(set_a - set_b)          # {1,2}(差集)

六、实际应用场景

1、用户输入处理

# 安全数值输入
def get_number(prompt):while True:try:return float(input(prompt))except ValueError:print("请输入有效数字!")price = get_number("请输入价格:")

2、数据清洗

# 混合类型列表清洗
raw_data = ["25", 30, "无效", 42.5, ""]
clean_data = []
for item in raw_data:try:clean_data.append(float(item))except:passprint(clean_data)  # [25.0, 30.0, 42.5]

七、重要转换规则表

原始类型 → 目标类型转换方法注意事项
str → intint("123")字符串必须为有效整数格式
float → intint(3.99)直接截断小数部分(不四舍五入)
list → setset([1,2,2,3])自动去重
dict → listlist({"a":1, "b":2})仅保留键的列表
bytes → strb"data".decode("utf-8")需指定正确编码
bool → intint(True) → 1True→1, False→0

相关文章:

Python之变量与数据类型总结

前言 一、基本数据类型 1、整数&#xff08;int&#xff09; 2、浮点数&#xff08;float&#xff09; 3、布尔值&#xff08;bool&#xff09; 4、字符串&#xff08;str&#xff09; 二、复合数据类型 1、列表&#xff08;list&#xff09; 1.1、列表基础 1.1.1、列…...

【大模型基础_毛玉仁】5.3 附加参数法:T-Patcher

目录 5.3 附加参数法&#xff1a;T-Patcher5.3.1 补丁的位置1&#xff09;键值存储体2&#xff09;补丁设计 5.3.2 补丁的形式5.3.3 补丁的实现1&#xff09;准确性2&#xff09;局部性 5.3 附加参数法&#xff1a;T-Patcher 附加参数法&#xff1a;通过引入可训练的额外参数实…...

【19期获取股票数据API接口】如何用Python、Java等五种主流语言实例演示获取股票行情api接口之沪深A股实时交易数据及接口API说明文档

​ 在量化分析领域&#xff0c;实时且准确的数据接口是成功的基石。经过多次实际测试&#xff0c;我将已确认可用的数据接口分享给正在从事量化分析的朋友们&#xff0c;希望能够对你们的研究和工作有所帮助&#xff0c;接下来我会用Python、JavaScript&#xff08;Node.js&…...

RSA 简介及 C# 和 js 实现【加密知多少系列_4】

〇、简介 谈及 RSA 加密算法&#xff0c;我们就需要先了解下这两个专业名词&#xff0c;对称加密和非对称加密。 对称加密&#xff1a;在同一密钥的加持下&#xff0c;发送方将未加密的原文&#xff0c;通过算法加密成密文&#xff1b;相对的接收方通过算法将密文解密出来原文…...

Koordinator-Metric查询

以CollectAllPodMetricsLast()举例,看看koordinator怎样使用tsdb进行查询。 CollectAllPodMetricsLast() GenerateQueryParamsLast()传入metric采集间隔2倍时间调用CollectAllPodMetrics()func CollectAllPodMetricsLast(statesInformer statesinformer.StatesInformer, metr…...

LeetCode1两数之和

**思路&#xff1a;**懒得写了&#xff0c;如代码所示 /*** Note: The returned array must be malloced, assume caller calls free().*/ struct hashTable {int key;//存值int val;//存索引UT_hash_handle hh; }; int* twoSum(int* nums, int numsSize, int target, int* re…...

AOA与TOA混合定位,MATLAB例程,三维空间下的运动轨迹,滤波使用EKF,附下载链接

本文介绍一个MATLAB代码&#xff0c;实现基于 到达角&#xff08;AOA&#xff09; 和 到达时间&#xff08;TOA&#xff09; 的混合定位算法&#xff0c;结合 扩展卡尔曼滤波&#xff08;EKF&#xff09; 对三维运动目标的轨迹进行滤波优化。代码通过模拟动态目标与基站网络&am…...

Java算法模板

合并区间 统计不同区间的元素个数 //合并区间List<Integer> result new ArrayList<>();int start intervals.get(0)[0];int end intervals.get(0)[1];for(int i1;i<intervals.size();i){int[] curr intervals.get(i);if(curr[0]>end){//不能合并&…...

软件架构设计中的软件过程模型初识

软件架构设计中的软件过程模型是指导软件开发过程的框架&#xff0c;它们定义了软件开发的不同阶段、活动、任务和角色。结合具体的使用场景&#xff0c;可以更好地理解这些模型如何在实际项目中应用。以下将详细介绍几种常见的软件过程模型&#xff0c;并结合典型场景进行讲解…...

征程 6E mipi tx 系列之方案介绍

MIPI TX 到车机显示系统设计指南 IDE 介绍 征程 6 IDE 架构图 IDE&#xff08;Image Display Engine&#xff09;包含图像显示单元&#xff08;Image Display Unit&#xff09;、图像数据输出模块&#xff08;MIPI CSI2 Device 和 MIPI DSI&#xff09;。通过 IDU 从内存中读…...

std::reference_wrapper 和 std::function的详细介绍

关于 std::reference_wrapper 和 std::function 的详细介绍及具体测试用例&#xff1a; 1. std::reference_wrapper&#xff08;引用包装器&#xff09; 核心功能 包装引用&#xff1a;将引用转换为可拷贝、可赋值的对象支持隐式转换&#xff1a;可自动转换为原始引用类型容器…...

【day4】数据结构刷题 树

6-1 二叉树的遍历 函数接口定义&#xff1a; void InorderTraversal( BinTree BT ); void PreorderTraversal( BinTree BT ); void PostorderTraversal( BinTree BT ); void LevelorderTraversal( BinTree BT ); 其中BinTree结构定义如下&#xff1a; typedef struct TNode *Po…...

基于Selenium的IEEE Xplore论文数据爬取实战指南

基于Selenium的IEEE Xplore论文数据爬取实战指南 一、项目背景与目标 IEEE Xplore作为全球知名的学术资源平台,收录了大量高质量科技文献。本教程将演示如何通过Python的Selenium库实现: 自动化获取指定领域论文列表(以"构音障碍"为例)完整提取论文标题、摘要、…...

Vue2 项目将网页内容转换为图片并保存到本地

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…...

flutter 专题 七十一 Flutter 自定义单选控件

在Flutter 应用开发中&#xff0c;经常会遇到各种单选效果&#xff0c;虽然官方提供了Radio组件&#xff0c;但是并不能满足我们实际的开发需求&#xff0c;所以往往还需要自定义控件才能满足平时的开发需求。下面就平时开发中用到的单选进行介绍&#xff1a; 自定义SegmentBa…...

质因数个数--欧拉函数中统计纯素数

和互质数不同&#xff0c;这里统计的是纯素数部分 就是x/i那一部分 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typedef pair<ll,int> PII; int n,m,k; ll eular(ll x) { ll an0;ll px;for(ll i2;i*i<x;i){if(x%i…...

RAG基建之PDF解析的“无OCR”魔法之旅

PDF文件转换成其他格式常常是个大难题,大量的信息被锁在PDF里,AI应用无法直接访问。如果能把PDF文件或其对应的图像转换成结构化或半结构化的机器可读格式,那就能大大缓解这个问题,同时也能显著增强人工智能应用的知识库。 嘿,各位AI探险家们!今天我们将踏上了一段奇妙的…...

Web开发:数据的加密和解密

一、常见通用术语解析 加盐&#xff1a;在密码中加入随机数据&#xff0c;提高安全性。摘要&#xff1a;固定长度的输出&#xff0c;用于数据完整性验证。加密&#xff1a;将数据转换为不可读形式&#xff0c;确保安全。撞库&#xff1a;通过暴力破解比对常见密码的攻击方式。…...

从零开始研发GPS接收机连载——15、使用新射频成功打卡日本地标

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 从零开始研发GPS接收机连载——15、使用新射频成功打卡日本地标 前言MAX2771配置测试MAX2771完整程序测试 前言 话说笔者花了一笔巨资买了一个指甲盖般大小的MAX2771射频板&…...

linux压缩指令

今天我们来了解一下linux压缩指令,压缩是我们文件传输的一种重要手段,对此,我们是必须学习压缩指令的,那么话不多说,来看. 1.grep过滤查找&#xff0c;管道符&#xff0c;“&#xff5c;”&#xff0c;表示将前一个命令的处理结果输出传递给后面的命令处理。 基本语法&#x…...

智能提示词生成器:助力测试工程师快速设计高质量测试用例

在软件测试中,测试用例设计方法的选择和实施是确保软件质量的重要步骤。测试工程师经常需要根据不同的测试场景、参数维度和业务需求,设计出覆盖率高且有效的测试用例。然而,设计测试用例并非易事,特别是在面对复杂的业务逻辑时。 为了帮助测试工程师高效生成测试用例提示…...

QML中使用Image显示图片和使用QQuickItem显示图片

在QML中显示图片时&#xff0c;Image元素和自定义QQuickItem有不同的特性和适用场景。以下是两者的详细对比及性能分析&#xff1a; 1. Image 元素 优点&#xff1a; 声明式语法&#xff1a;简单直观&#xff0c;适合静态图片或简单动态需求 Image {source: "image.png&…...

若依赖前端处理后端返回的错误状态码

【背景】 后端新增加了一个过滤器&#xff0c;用来处理前端请求中的session 若依赖存放过滤器的目录&#xff1a;RuoYi-Vue\ruoyi-framework\src\main\java\com\ruoyi\framework\security\filter\ 【问题】 后端返回了一个状态码为403的错误&#xff0c;现在前端需要处理这…...

C++23:现代C++的模块化革命与零成本抽象新高度

以下代码为伪代码&#xff0c;仅供参考 一、标准库的范式突破 1. std::expected&#xff1a;类型安全的错误处理 std::expected<DataPacket, ErrorCode> parsePacket(ByteStream& stream) {if (stream.header_valid()) return decode_packet(stream);elsereturn s…...

【嵌入式学习3】TCP服务器客户端 - UDP发送端接收端

目录 1、TCP TCP特点 TCP三次握手&#xff08;建立TCP连接&#xff09;&#xff1a; TCP四次握手【TCP断开链接的时候需要经过4次确认】&#xff1a; TCP网络程序开发流程 客户端开发&#xff1a;用户设备上的程序 服务器开发&#xff1a;服务器设备上的程序 2、UDP 为…...

《Spring Cloud Eureka 高可用集群实战:从零构建高可靠性的微服务注册中心》

从零构建高可用 Eureka 集群 | Spring Cloud 微服务架构深度实践指南 本文核心内容基于《Spring Cloud 微服务架构开发》第1版整理&#xff0c;结合生产级实践经验优化 实验环境&#xff1a;IntelliJ IDEA 2024 | JDK 1.8| Spring Boot 2.1.7.RELEASE | Spring Cloud Greenwich…...

Dust3r、Mast3r、Fast3r

目录 一.Dust3r 1.简述 2.PointMap与ConfidenceMap 3.模型结构 4.损失函数 5.全局对齐 二.Mast3r 1.简述 2.MASt3R matching 3.MASt3R sfm 匹配与标准点图 BA优化 三.Fast3r 1.简述 2.模型结构 3.损失函数 三维重建是计算机视觉中的一个高层任务&#xff0c;包…...

HTML5 Web SQL 数据库学习笔记

HTML5 的 Web SQL 数据库曾是一种用于在浏览器客户端存储数据的技术&#xff0c;但目前已被废弃。尽管如此&#xff0c;了解其基本概念和操作方法仍具有一定的学习价值。以下是关于 Web SQL 数据库的学习笔记。 一、Web SQL 数据库概述 1.1 状态与替代方案 Web SQL API 已被…...

Plastiform复制胶泥:高精度表面复制与测量的高效工具

在工业制造和质量检测领域&#xff0c;表面复制和测量是确保产品质量的关键环节。Plastiform复制胶泥作为一种创新材料&#xff0c;凭借其出色的性能和多样化的应用&#xff0c;为用户提供了可靠的解决方案。它能够快速捕捉复杂表面的细节&#xff0c;确保测量结果的准确性&…...

安装 `torch-sparse` 和 `torch-cluster`

✅ 安装 torch-sparse 和 torch-cluster 请直接运行下面这条 一行命令 来装 PyG 剩余依赖&#xff08;适配我已装好的 PyTorch 2.5.1cpu&#xff09;&#xff1a; pip install torch-sparse torch-cluster -f https://data.pyg.org/whl/torch-2.5.1cpu.html✅ 或者自己去官网…...

Linux之基础知识

目录 一、环境准备 1.1、常规登录 1.2、免密登录 二、Linux基本指令 2.1、ls命令 2.2、pwd命令 2.3、cd命令 2.4、touch命令 2.5、mkdir命令 2.6、rmdir和rm命令 2.7man命令 2.8、cp命令 2.9、mv命令 2.10、cat命令 2.11、echo命令 2.11.1、Ctrl r 快捷键 2…...

[mlr3] Bootstrap与交叉验证k-fold cross validation

五折交叉验证因其无放回分层抽样和重复验证机制&#xff0c;成为超参数调优的首选&#xff1b; 而Bootstrap因有放回抽样的重复性和验证集的不稳定性&#xff0c;主要服务于参数估计&#xff08;置信区间的计算&#xff09;而非调优。 实际应用中&#xff0c;可结合两者优势&am…...

自动化构建攻略:Jenkins + Gitee 实现 Spring Boot 项目自动化构建

Jenkins Gitee 实现 Spring Boot 项目自动化构建 环境准备安装配置jdk安装配置maven安装git安装配置Jenkins 测试构建测试自动化触发 环境准备 云服务器环境&#xff1a; 系统版本&#xff1a;Ubuntu 24.04 64位ecs规格&#xff1a;4核(vCPU)8 GiB公网带宽&#xff1a;10Mbi…...

Python 中的不可变数据类型的解析

# Python 中的不可变数据类型的解析 在 Python 的世界里&#xff0c;数据类型扮演着至关重要的角色。根据数据是否可以在创建后被修改&#xff0c;Python 数据类型可分为可变和不可变两类。本文将聚焦于不可变数据类型&#xff0c;详细介绍它们的特点&#xff0c;并结合具体实例…...

【Kafka】分布式消息队列的核心奥秘

文章目录 一、Kafka 的基石概念​主题&#xff08;Topic&#xff09;​分区&#xff08;Partition&#xff09;​生产者&#xff08;Producer&#xff09;​消费者&#xff08;Consumer&#xff09;​ 二、Kafka 的架构探秘​Broker 集群​副本机制​ 三、Kafka 的卓越特性​高…...

基于Promise链式调用的多层级请求性能优化

代码优化-循环嵌套关联请求 1. 背景 在实际开发中&#xff0c;我们经常会遇到需要嵌套关联请求的场景&#xff0c;比如&#xff1a; 获取项目列表获取项目详情获取项目进度 2. 问题 在这种场景下&#xff0c;我们可能会遇到以下问题&#xff1a; 串行请求瀑布流&#xff…...

RuoYi基础学习

1 若依搭建 前后端分离版本&#xff1a;RuoYi-Vue利用SpringBoot作为后端开发框架&#xff0c;与Vue.js结合&#xff0c;实现了前后端分离的开发模式。这种架构有助于提高开发效率&#xff0c;前后端可以独立开发和部署&#xff0c;更适合现代化的Web应用开发。 RuoYi-Vue3&a…...

解决关于原生gmssl无法直接输出sm2私钥明文的问题

解决关于原生gmssl无法直接输出sm2私钥明文的问题 问题描述解决方法解决方法一解决方法二 问题描述 通过gmssl生成sm2公私钥对时&#xff0c;输出的是加密的sm2私钥&#xff0c;无法获取到SM2私钥明文。 解决方法 解决方法一 手动解密&#xff1a; 解决方法二 修改源码&…...

AT24Cxx移植第三方库到裸机中使用

简介 MCU : STM32F103C8T6 库: HAL库裸机开发 EEPROM : AT24C02, 256Byte容量&#xff0c;I2C接口 电路图 AT24C02 电路图 电路图引用 逻辑直接读写 // 写入数据到 EEPROM HAL_StatusTypeDef EEPROM_WriteByte(uint16_t MemAddress, uint8_t Data) {// 发送数据uint8_t …...

【落羽的落羽 C++】内存区域、C++的内存管理

文章目录 一、内存区域二、C的内存管理1. new和delete2. new和delete的特点3. 实现的原理 一、内存区域 C语言和C中&#xff0c;我们常把计算机的内存分为不同的区域&#xff0c;有各自不同的功能&#xff1a; 栈区&#xff1a;存放函数的局部变量、参数、返回地址等。堆区&a…...

星际旅行(去年蓝桥杯省赛b组-第7题)

题目链接: 蓝桥账户中心 朋友分享给我一道题&#xff0c;我刚开始其实先用dfs写&#xff0c;但是直接就超时了(很大的一部分原因是截图中没有数据范围) #include<bits/stdc.h> using namespace std; const int MAXN 1e97; vector<int> graph[MAXN]; bool visite…...

转发和重定向的区别详解

转发&#xff08;Forward&#xff09;和重定向&#xff08;Redirect&#xff09;是 Web 开发中两种常用的请求处理方式&#xff0c;主要用于将客户端请求从一个资源转移到另一个资源。它们在实现机制、行为表现和应用场景上有显著区别&#xff0c;以下是对两者的详细解析&#…...

HarmonyOS NEXT——【鸿蒙相册图片以及文件上传Picker封装】

1、鸿蒙系统文件/图片上传base64&#xff1a; 鸿蒙应用需要上传图片或者文件时&#xff0c;由于更高的安全性与更严谨的访问权限&#xff0c;通常无法直接从系统相册或文件管理中直接上传&#xff0c;因此我们可以通过picker对象去拉起相册访问的能力&#xff0c;引导用户选择…...

Java中文件copy的5种方式

Java中文件copy的5种方式 传统字节流缓冲流jdk7 Files.copy通道&#xff08;零拷贝&#xff09;内存映射对比 传统字节流 缓冲流 jdk7 Files.copy 通道&#xff08;零拷贝&#xff09; 内存映射 对比...

Nacos Client 模块的作用是什么?是如何与 Server 端通信的?

Nacos Client 模块是 Nacos 架构中的重要组成部分&#xff0c;它负责与 Nacos Server 端进行交互&#xff0c;实现服务注册、服务发现、配置管理等核心功能。 可以将 Nacos Client 理解为 Nacos 提供给应用程序使用的 SDK。 Nacos Client 模块的主要作用: 服务注册 (Service R…...

c中的变量命名规则

在 C 中&#xff0c;变量命名需要遵循一定的规则和约定&#xff0c;以确保代码的可读性和合法性。以下是 C 变量命名的详细规则&#xff1a; 1. 基本规则 字母开头&#xff1a;变量名必须以字母&#xff08;a-z 或 A-Z&#xff09;或下划线&#xff08;_&#xff09;开头&…...

DDR(Double Data Rate)详解

一、DDR的定义与核心特性 DDR&#xff08;双倍数据率同步动态随机存取存储器&#xff09; 是一种 基于时钟上升沿和下降沿传输数据的高速内存技术&#xff0c;广泛应用于计算机、嵌入式系统、移动设备等领域。其核心特性包括&#xff1a; 双倍数据率&#xff1a;每个时钟周期传…...

aocache:AOCache 新增功能深度解析:从性能监控到灵活配置的全方位升级

最近对aocache 进行了重要升级&#xff0c;最新版本0.6.0增加了几项新功能&#xff1a;性能分析日志&#xff0c;AOCache性能分析工具&#xff0c;切入点自定义配置&#xff0c;全局配置&#xff0c;本文详细说明这几项目新功能的作用和使用方式。 一、性能分析日志 需求背景…...

IsaacLab最新2025教程(7)-引入IK solver控制机器人

机器人控制可以直接给定关节角进行驱动实现功能&#xff0c;完成任务&#xff0c;但是关节角不是很直观而且做teleoperation或者是结合VLA模型时候&#xff0c;用eef pose会更符合直觉一些&#xff0c;isaacsim用的是LulaKinematics&#xff0c;因为IsaacLab现在是ETHZ的团队在…...

【测试】每日3道面试题 3/30

每日更新&#xff0c;建议关注收藏点赞。 白盒测试逻辑覆盖标准&#xff1f;哪种覆盖标准覆盖率最高&#xff1f; 5种。语句覆盖、分支/判定覆盖、条件覆盖、条件组合覆盖【覆盖率最高&#xff0c;所有可能条件组合都验证】、路径覆盖【理论上最高&#xff0c;但实际很难实现】…...