Python快速入门-零基础也能掌握的编程技巧,基础方法和API整理

目录

前言

数据结构

数字

数学运算

随机数

字符串

列表

元组

字典

面向对象

JSON

文件操作

扩展

制作一个简易时钟


前言

环境什么就不在赘述,可以参考其他文章,也可以在线运行

CSDN在线运行地址:InsCode - 让你的灵感立刻落地

Python基础 - 从数据类型到面向对象_for var in vartuple-CSDN博客

python入门-从安装环境配置(Anaconda)到做一个下班打卡提醒.exe小工具_开发电脑软件提醒下班-CSDN博客

数据结构

数字、字符串、列表、元组、字典

数字

Python Number 数据类型用于存储数值,包括整型、长整型、浮点型、复数。

数学运算
import mathprint("1.1向上取整:", math.ceil(1.1))  # 返回数字的上入整数
print("1.9向下取整:", math.floor(1.9))  # 返回数字的下舍整数
print("-2:的绝对值:", math.fabs(-2))  # 返回数字的绝对值
print("3的平方根:", math.sqrt(3))  # 返回数字的平方根# math.exp(1) 会打印出自然数 e(约等于 2.71828)的指数值,因为 math.exp() 函数用于计算一个数的自然指数(以 e 为底)。当参数为 1 时,它计算的就是 e 的 1 次方,即 e 本身。
print("返回e的x次幂:", math.exp(1))  # 返回e的x次幂(自然指数)print("3的2次方:", math.pow(3, 2))  # 返回 x 的 y 次方。
print("2的阶乘:", math.factorial(2))  # 返回数字的阶乘
print("78和186的最大公约数:", math.gcd(78, 186))  # 返回 x 和 y 的最大公约数
print("是否是无穷数:", math.isinf(3.1415926))  # 如果数字是正无穷或负无穷,返回 True。
print("是否是NaN:", math.isnan(33))  # 如果 x 是 NaN(不是一个数字),返回 True。
print("π 的值:", math.pi)  # math.pi:π 的值。
print("角度转换弧度:", math.radians(30))  # 将角度转换为弧度
print("弧度转换角度:", math.degrees(1))  # 弧度转换为角度。

1.1向上取整: 2
1.9向下取整: 1
-2:的绝对值: 2.0
3的平方根: 1.7320508075688772
返回e的x次幂: 2.718281828459045
3的2次方: 9.0
2的阶乘: 2
78和186的最大公约数: 6
是否是无穷数: False
是否是NaN: False
π 的值: 3.141592653589793
角度转换弧度: 0.5235987755982988
弧度转换角度: 57.29577951308232

随机数
import randomprint(random.random()) # 生成一个 [0.0, 1.0) 之间的随机浮点数
print(random.randint(1,20)) # 生成一个指定范围内的随机整数,范围在1-20 之间
# 0.346862053678905
# 18

更多

random.uniform(1, 10)  # 生成一个指定范围内的随机浮点数,范围在 [1, 10) 之间。
random.randrange(10)  # 生成一个从0到9(包含0但不包含10)的随机整数
random.randrange(1, 10)  # 生成一个从0到9(包含0但不包含10)的随机整数
random.randrange(0, 100, 2)  # 生成一个从0到99(包含0但不包含100)的随机整数,步长为2(每次增加的数量)本示例会跳过非 2 的倍数的整数seq = ['apple', 'banana', 'cherry', 'date', 'elderberry']
random.choice(seq)  # 从序列 seq 中随机选择一个元素。
random.shuffle(seq)  # 将序列seq随机打乱顺序
random.sample(seq, 3)  # 从seq中随机选择3个元素,返回一个列表。
random.seed(a=None)  # 设置随机数生成器的种子值。如果是None或者未提供,则使用当前系统时间。
random.getrandbits(5)  # 生成一个5位长的随机无符号整数。它的范围是从 0 到 2**k - 1,  0 到 2 的 k 次方减 1 之间的随机整数。random.expovariate(0.5) # 生成一个指数分布的随机浮点数,其中0.5是分布的参数。越大,分布就越向右倾斜,意味着事件发生的频率越高。
random.gammavariate(alpha, beta) # 生成一个伽马分布的随机浮点数,其中alpha和beta是分布的参数。
random.gauss(mu, sigma) # 生成一个正态(高斯)分布的随机浮点数,其中mu是均值,sigma是标准差。

字符串

# 字符串连接:+
print("Hello " + "World ")
# 重复输出字符串:*
print('a ' * 3)
# 首字母大写,其余字母小写
print("hello World".capitalize())
# 所有大写字母转换为小写
print("HELLO WORLD".lower())
# 所有小写字母转换为大写
print("hello world".upper())
# 将字符串中的大写字母转换为小写,小写字母转换为大写。
print("Hello World".swapcase())  # 输出 "hELLO wORLD"
# 将字符串中每个单词的首字母大写,其余字母小写。
print("hello world".title())  # 输出 "Hello World"
# 通过索引获取字符串中字符[]
print("Hello"[0])
# 字符串截取[:] :左闭右开
print("Hello"[1:3])
# 判断字符串中是否包含给定的字符: in, not in
print('e' in 'Hello')
print('e' not in 'Hello')
# join():以字符作为分隔符,将字符串中所有的元素合并为一个新的字符串
print('-'.join('Hello'))
# 字符串单引号、双引号、三引号(纯文本,包括引号和特殊字符串)
print('Hello World!')
print("Hello World!")
print('''I'm going to the movies''')
# 转义字符 \
print("The \t is a tab")
# 返回字符串的长度
print(len("hello"))  # 输出 5
# 计算子字符串 substr 在字符串中出现的次数。
print("banana".count("a"))  # 输出 3
# 查找子字符串在字符串中首次出现的位置。如果未找到,find() 返回 -1,而 index() 会引发 ValueError 异常
print("banana".find("a"))  # 输出 1
print("banana".index("a"))  # 输出 1
# 字符串替换
print("banana".replace("a", "o"))  # 输出 "bonono"
# 以 , 为分隔符将字符串分割成一个列表。如果 maxsplit 指定了,则最多分割 maxsplit 次。
print("apple,banana,cherry".split(","))  # 输出 ['apple', 'banana', 'cherry']
# 移除字符串开头和结尾的空白字符
print("   hello   ".strip())  # 输出 "hello"
# 仅移除左侧的空白字符、仅移除右侧的空白字符。
print("   hello   ".lstrip())  # 输出 "hello   "
print("   hello   ".rstrip())  # 输出 "   hello"
# 检查字符串是否以指定的前缀或后缀开始或结
print("banana".startswith("ban"))  # 输出 True
print("banana".endswith("ana"))  # 输出 True
# 格式化字符串
name = "Alice"
age = 25
print("My name is {} and I am {} years old.".format(name, age))

列表

类似其他语言中的数组

# 声明一个列表
names = ['jack', 'tom', 'tonney', 'superman', 'jay']# 通过下标或索引获取元素
print(names[1])  # tom
# 获取最后一个元素
print(names[-1])  # jay
print(names[len(names) - 1])  # jay
# 获取第一个元素
print(names[-5])  # jack
# 遍历列表,获取元素
for name in names:print(name)
# 列表元素添加
names.append('杨超越')
# 一次添加多个。把一个列表添加到另一个列表 ,列表合并。
models = ['刘雯', '奚梦瑶']
names.extend(models)
print(names)
# 列表元素修改
names[-1] = 'strawberry'
# 列表元素删除
del names[0]
names.remove('杨超越')
names.pop(0)
# 列表切片,根据下标切取列表,返回列表
print(names)  # ['tonney', 'superman', 'jay', '刘雯', 'strawberry']
print(names[-1:])  # ['strawberry']
print(names[2:5])  # ['jay', '刘雯', 'strawberry']list = [0, 10, 3, 5, 8]
# 默认升序
print(sorted(list))
# 降序
print(sorted(list, reverse=True))
# 在指定索引处插入一个元素
list.insert(1, 100)
# 返回列表中某个元素的出现次数
list.count(1)
# 反转列表中的元素
list.reverse()
# 将可迭代对象转换为列表
list(iterable)
# 移除列表中的所有元素
list.clear()

元组

与列表类似,元组中的内容不可修改,元组类型提供了一些常用的内置函数来操作元组

# 相连
t1 = (1, 2, 3) + (4, 5)
print(t1)  # (1, 2, 3, 4, 5)
# 乘2
t2 = (1, 2) * 2
print(t2)  # (1, 2, 1, 2)
# 将可迭代对象转换为元组。
t = tuple([1, 2, 3])  # 从列表转换为元组
# 返回元组中的元素个数。
t = len((1, 2, 3))
# 返回元组中的最大值
t = (1, 3, 2)
print(max(t))  # 输出 3
# 返回元组中的最小值。
t = (1, 3, 2)
print(min(t))  # 输出 1
# 返回元组中所有元素的和(仅适用于数值类型元素)。
t = (1, 2, 3)
print(sum(t))  # 输出 6
# 返回元组中某个值出现的次数。
t = (1, 2, 3, 2, 1)
print(t.count(2))  # 输出 2
# 返回元组中第一个匹配值的索引,如果没有找到则引发ValueError。
t = (1, 2, 3)
print(t.index(2))  # 输出 1
# 使用切片操作从元组中获取子序列。
t = (0, 1, 2, 3, 4, 5)
print(t[1:4])  # 输出 (1, 2, 3)

字典

# list可以转成字典,但前提是列表中元素都要成对出现
dict3 = dict([('name', '杨超越'), ('weight', 45)])# clear(): 移除字典中的所有项。
my_dict = {'a': 1, 'b': 2}
my_dict.clear()  # {}
# 返回字典的一个浅复制。
my_dict = {'a': 1, 'b': 2}
copy_dict = my_dict.copy()  # {'a': 1, 'b': 2}
# 返回指定键的值,如果键不存在则返回默认值。
my_dict = {'a': 1, 'b': 2}
print(my_dict.get('a'))  # 输出 1
print(my_dict.get('c'))  # 输出 None
print(my_dict.get('c', 0))  # 输出 0
# 返回字典中所有键值对的视图。
my_dict = {'a': 1, 'b': 2}
items_view = my_dict.items()
print(items_view)  # dict_items([('a', 1), ('b', 2)])
# 返回字典中所有键的视图。
my_dict = {'a': 1, 'b': 2}
keys_view = my_dict.keys()  # keys_view现在是dict_keys(['a', 'b'])
# 移除并返回指定键的值,如果键不存在则返回默认值。
my_dict = {'a': 1, 'b': 2}
print(my_dict.pop('a'))  # 输出 1
print(my_dict.pop('c', 0))  # 输出 0
# my_dict现在是{'b': 2}# 移除并返回字典中的最后一个键值对(随机)。
my_dict = {'a': 1, 'b': 2}
print(my_dict.popitem())  # 输出 ('b', 2) 或 ('a', 1),取决于Python实现
# my_dict现在是{'a': 1} 或 {'b': 2}# 如果键在字典中,返回它的值;否则,插入键和默认值,并返回默认值。
my_dict = {'a': 1, 'b': 2}
print(my_dict.setdefault('a', 0))  # 输出 1
print(my_dict.setdefault('c', 0))  # 输出 0,且'c': 0被添加到字典中
# my_dict现在是{'a': 1, 'b': 2, 'c': 0}# 使用另一个字典更新当前字典。
my_dict = {'a': 1, 'b': 2}
my_dict.update({'b': 3, 'c': 4})
# my_dict现在是{'a': 1, 'b': 3, 'c': 4}# 返回字典中所有值的视图。
my_dict = {'a': 1, 'b': 2}
values_view = my_dict.values()
# values_view现在是dict_values([1, 2])

面向对象

class Animal:# init()定义构造函数,与其他面向对象语言不同的是,Python语言中,会明确地把代表自身实例的self作为第一个参数传入# init()方法接收参数,使用点号 . 来访问对象的属性def __init__(self, name):self.name = nameprint('动物名称实例化', name)# 创建一个实例化对象 cat,def eat(self):print(self.name + '要吃东西啦!')def drink(self):print(self.name + '要喝水啦!')cat = Animal('dog')
print(cat.name)
cat.eat()
cat.drink()

动物名称实例化 dog
dog
dog要吃东西啦!
dog要喝水啦!

class Dog(Animal):  # 定义子类def __init__(self, name):super().__init__(name)print('调用子类构造方法')def study(self):print('调用子类方法')

动物名称实例化 旺财
调用子类构造方法
调用子类方法
旺财要吃东西啦!

JSON

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写。

import json# Python 对象编码成 JSON 字符串
data = [{'b': 2, 'd': 4, 'a': 1, 'c': 3, 'e': 5}]
jsonStr = json.dumps(data)
print(jsonStr)# sort_keys=True表示按照字典排序(a到z)输出。
# indent参数,代表缩进的位数
# separators参数的作用是去掉,和:后面的空格,传输过程中数据越精简越好
jsonStr = json.dumps(data, sort_keys=True, indent=4, separators=(',', ':'))
print(jsonStr)# 将string转换为dict
jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}'
text = json.loads(jsonData)
print(text)

文件操作

# 打开一个文件并返回文件对象。filename 是文件名,mode 是文件访问模式,默认为 'r'(只读)。其他常见的模式包括 'w'(写入,如果文件已存在则覆盖)、'a'(追加,如果文件已存在则在文件末尾添加内容)、'r+'(读写)等。
import osf = open("test1.py", mode='r')# 读取文件内容。size 参数指定读取的字节数,如果为负数或省略,则读取整个文件。
f.read(size=-1)
# 读取文件的一行。size 参数指定读取的字节数。
f.readline(size=-1)
# 读取文件的所有行并返回一个包含每行内容的列表。sizehint 参数是一个可选参数,用于指定读取的行数。
f.readlines(sizehint=-1)
# 将字符串写入文件。
f.write("string")
# 将一个字符串列表写入文件。
f.writelines(["1", "2", "3"])
# 改变文件对象的当前位置。offset 参数表示偏移的字节数,whence 参数指定起始位置,默认为 0(文件开头),其他可选值包括 1(当前位置)和 2(文件末尾)。
f.seek(offset, whence=0)
# 返回文件对象的当前位置。
f.tell()
# 刷新文件对象的缓冲区,确保所有待写入的数据都被写入文件。
f.flush()
# 关闭一个打开的文件。
f.close()os.path.exists(path)  # 检查文件或目录是否存在。
os.path.isfile(path)  # 检查指定路径是否为文件。
os.path.isdir(path)  # 检查指定路径是否为目录。
os.path.getsize(path)  # 返回文件的大小(以字节为单位)。
os.remove(path)  # 删除文件。
os.rename(src, dst)  # 重命名文件或目录。
os.makedirs(path, exist_ok=False)  # 递归创建目录。如果 exist_ok 为 True,则当目录已存在时不会引发异常。
os.rmdir(path)  # 删除目录(必须为空)。
# 使用 with 语句可以自动处理文件的打开和关闭,避免忘记关闭文件。例如:
with open('file.txt', 'r') as f:content = f.read()

扩展

制作一个简易时钟

import turtle
import datetime# 悬空移动
def move(distance):turtle.penup()turtle.forward(distance)turtle.pendown()# 创建表针turtle
def createHand(name, length):turtle.reset()move(-length * 0.01)turtle.begin_poly()turtle.forward(length * 1.01)turtle.end_poly()hand = turtle.get_poly()turtle.register_shape(name, hand)# 创建时钟
def createClock(radius):turtle.reset()turtle.pensize(7)for i in range(60):move(radius)if i % 5 == 0:turtle.forward(20)move(-radius - 20)else:turtle.dot(5)move(-radius)turtle.right(6)def getWeekday(today):return ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'][today.weekday()]def getDate(today):return '%s年%s月%s日' % (today.year, today.month, today.day)def startTick(second_hand, minute_hand, hour_hand, printer):today = datetime.datetime.today()second = today.second + today.microsecond * 1e-6minute = today.minute + second / 60.hour = (today.hour + minute / 60) % 12# 设置朝向second_hand.setheading(6 * second)minute_hand.setheading(6 * minute)hour_hand.setheading(12 * hour)turtle.tracer(False)printer.forward(65)printer.write(getWeekday(today), align='center', font=("Courier", 14, "bold"))printer.forward(120)printer.write('12', align='center', font=("Courier", 14, "bold"))printer.back(250)printer.write(getDate(today), align='center', font=("Courier", 14, "bold"))printer.back(145)printer.write('6', align='center', font=("Courier", 14, "bold"))printer.home()printer.right(92.5)printer.forward(200)printer.write('3', align='center', font=("Courier", 14, "bold"))printer.left(2.5)printer.back(400)printer.write('9', align='center', font=("Courier", 14, "bold"))printer.home()turtle.tracer(True)# 100ms调用一次turtle.ontimer(lambda: startTick(second_hand, minute_hand, hour_hand, printer), 100)def start():# 不显示绘制时钟的过程turtle.tracer(False)turtle.mode('logo')createHand('second_hand', 150)createHand('minute_hand', 125)createHand('hour_hand', 85)# 秒, 分, 时second_hand = turtle.Turtle()second_hand.shape('second_hand')minute_hand = turtle.Turtle()minute_hand.shape('minute_hand')hour_hand = turtle.Turtle()hour_hand.shape('hour_hand')for hand in [second_hand, minute_hand, hour_hand]:hand.shapesize(1, 1, 3)hand.speed(0)# 用于打印日期等文字printer = turtle.Turtle()printer.hideturtle()printer.penup()createClock(160)# 开始显示轨迹turtle.tracer(True)startTick(second_hand, minute_hand, hour_hand, printer)turtle.mainloop()if __name__ == '__main__':start()

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

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

相关文章

Amesim基础篇-热仿真常用模型库-Thermal Hydraulic /Resistance

有言在先 流体库、管路库在热管理中是必备模块,如动力电池液冷循环系统均需要Thermal Hydraulic /Resistance库的元件建模。 1 流体物性设置 AMEsim中内嵌了大部分液冷的热物性,直接在流体子模型上选择即可。常规使用的是50%乙二醇水溶液,如…

水表智能抄表系统是什么?

水表智能抄表系统是一种现代化水资源保护专用工具,它利用先进的物联网、云计算和大数据剖析,完成了智能抄表、实时监控系统、数据分析等作用,大大提高了水务管理的效率和精确性。 1.功能特点 1.1远程控制自动抄表 传统水表抄水表方法采用人…

sentinel-dashborard下发流控规则未生效排查解决

Sentinel简介 Sentinel是阿里巴巴开源的一个流量控制组件,它以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。Sentinel的核心思想是:通过动态设置的规则,对进入系统的流量进行控制,…

C#知识|将选中的账号信息展示到控制台(小示例)

哈喽,你好啊,我是雷工! 上篇学习了控件事件的统一关联, 本篇通过实例练习继续学习事件统一处理中Tag数据获取、对象的封装及泛型集合List的综合运用。 01 实现功能 在上篇的基础上实现,点击选中喜欢的账号&#xff0…

如何将Hyper-V转VMware?反之亦可

为何要在Hyper-V和VMware之间进行转换呢? 尽管VMware和Microsoft Hyper-V都是当前流行的一类虚拟机监控程序,但它们并不相互兼容。VMware产品使用VMDK格式创建虚拟磁盘,而Hyper-V则使用VHD或VHDX格式创建虚拟磁盘。 有时您可能需要进行这种转…

Edge视频增强功能

edge://flags/#edge-video-super-resolution 搜索Video查找 Microsoft Video Super Resolution 设置为Enabled

凸优化理论学习一|最优化及凸集的基本概念

文章目录 一、优化问题(一)数学优化(二)凸优化 二、凸集(一)一些标准凸集(二)保留凸性的运算(三)正常锥和广义不等式(四)分离和支撑超…

计数问题C++

题目&#xff1a; 思路&#xff1a; 1~n之间进行循环遍历&#xff0c;如果i不等于0继续循环&#xff0c;然后求出i的个位数与十位数&#xff0c;如果个位数为要查找的特定数字&#xff0c;计时器就1. 代码&#xff1a; #include<iostream> using namespace std; int n,x…

短视频收益分成一览表​​​​​​​​​​​​​​​​,视频号怎么做有收益的

今日为大家揭秘一个热门视频号的操作技巧。很多人都已经操作这类账号&#xff0c;并从中获益。视频号目前是市场上非常热门的平台之一&#xff0c;流量之大令人惊叹&#xff0c;先不提那些私域营销的巨大优势&#xff0c;仅从创作分成计划角度来看&#xff0c;已有许多人每天能…

react18【系列实用教程】useEffect —— 副作用操作 (2024最新版)

什么是副作用操作&#xff1f; useEffect 用于编写由渲染本身引起的对接组件外部的操作&#xff08;官方称呼为&#xff1a;副作用操作&#xff09; 以下情况会触发页面渲染 初次加载页面&#xff08;组的挂载&#xff09;响应式变量发生变化&#xff0c;触发页面根据新值重新…

死锁调试技巧:工作线程和用户界面线程

有人碰到了一个死锁问题&#xff0c;找到我们想请我们看看&#xff0c;这个是关于应用程序用户界面相关的死锁问题。 我也不清楚他为什么会找上我们&#xff0c;可能是因为我们经常会和窗口管理器打交道吧。 下面&#xff0c;我们来看看死锁的两个线程。 >> 请移步至 …

软件工程经济学--期末复习资料

软件工程经济学--期末复习资料 前言第一章 绪论第二章 软件工程经济学基础第三章 软件的成本管理与定价分析第四章 软件工程项目评价方法与经济效果评价第五章 软件生产函数、效益分析及不确定性分析第六章 软件工程项目进度计划的制定结尾总结 前言 软件工程经济学&#xff0…

Java 开发 框架安全:Spring 漏洞序列.(CVE-2022-22965)

什么叫 Spring 框架. Spring 框架是一个用于构建企业级应用程序的开源框架。它提供了一种全面的编程和配置模型&#xff0c;可以简化应用程序的开发过程。Spring 框架的核心特性包括依赖注入&#xff08;Dependency Injection&#xff09;、面向切面编程&#xff08;Aspect-Or…

计算机服务器中了devicdata勒索病毒如何解密,devicdata勒索病毒解密恢复工具

在网络技术飞速发展的时代&#xff0c;有效地利用网络开展各项工作业务&#xff0c;能够大大提升企业的生产运行效率&#xff0c;改善企业的发展运营模式&#xff0c;但如果网络利用不好就会给企业的数据安全带来严重威胁。近日&#xff0c;云天数据恢复中心接到很多企业的求助…

centos7.9升级4.19内核

centos默认的内核版本是3.10 通过命令 uname -a 输出系统的详细信息 在部署k8s集群时使用默认的3.10版本的内核&#xff0c;容易出各种奇奇怪怪的问题、可以理解为docker和k8s与该内核版本不兼容&#xff0c;所以在部署k8s集群时&#xff0c;务必要升级内核&#xff0c;这里…

ESP32重要库示例详解(一):EEPROM之Preferences库

1. 了解EEPROM 在嵌入式系统开发中&#xff0c;断电后晚能存储少量数据是常见需求。EEPROM&#xff08;Electrically Erasable Programmable Read-Only Memory&#xff09;是一种非易失性存储器&#xff0c;即使断电数据也不会丢失。ESP32的EEPROM模拟功能利用闪存空间&#x…

移动硬盘加了PD充电口给设备供电:未来存储与供电的完美结合

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 一、引言 随着科技的飞速发展&#xff0c;电子设备在人们的日常生活中扮演着越来越重要的角色。与此同时&#xff0c;设备间的互联互通和供电方式的便捷性也成为了用户关注的焦点。移动硬盘&#xff0c;作…

Node.js安装与配置环境 v20.13.1(LTS)

1 下载 Node.js — Run JavaScript Everywhere LTS -- long-term support&#xff0c;长期维护版本 如果要下载其他版本在download里选择下载 2 安装 一路点击next&#xff0c;默认安装路径C:\Program Files\nodejs 3 环境变量配置 1&#xff09;Path环境变量增加nodejs安装…

Prometheus 监控平台组件深度讲解

Prometheus 的重要性和流行度已经无需多言。直入主题&#xff0c;本文对 Prometheus 监控平台的各个组件做深度讲解&#xff0c;希望能帮助读者更好地理解 Prometheus。 监控系统的核心逻辑 对于一套监控系统而言&#xff0c;核心就是采集数据并存储&#xff0c;然后做告警判…

Qt模型视图代理之QTableView应用的简单介绍

往期回顾 Qt绘图与图形视图之绘制带三角形箭头的窗口的简单介绍-CSDN博客 Qt绘图与图形视图之Graphics View坐标系的简单介绍-CSDN博客 Qt模型视图代理之MVD(模型-视图-代理)概念的简单介绍-CSDN博客 Qt模型视图代理之QTableView应用的简单介绍 一、最终效果 二、设计思路 这里…