DebugInfo 模型功能系统介绍 文本上色 文本与表格对齐 分隔线 秒表计算器 语义日期

news2024/9/24 1:16:17

背景

今天系统性的为大家介绍一下 DebugInfo 模块。这个模块提供了一些丰富的基本功能的封装,希望能给有需要的人带来些许帮助。


文本上色

DebugInfo 模块引入了 colorama提供文本颜色支持。

# -*- coding:UTF-8 -*-

# region 引入必要依赖
from DebugInfo.DebugInfo import *

# endregion

# 将要打印的文本做为 函数 红字 的入参
print(红字('这是串红色的文字'))

以上代码,将要打印的文本通过方法 红字 修饰后做为 print 的参数,则可以打印出红色的字体,如下:
DebugInfo 红字效果
DebugInfo模型还提供了以下的颜色修饰支持,以下代码分别进行的方法名和效果的打印展示:

# -*- coding:UTF-8 -*-

# region 引入必要依赖
from DebugInfo.DebugInfo import *

# endregion

画板 = 调试模板()

画板.添加一行('红字', 红字('红字'))
画板.添加一行('红底', 红底('红底'))

画板.添加一行('红底白字', 红底白字('红底白字'))
画板.添加一行('红底黑字', 红底黑字('红底黑字'))
画板.添加一行('红底黄字', 红底黄字('红底黄字'))
画板.添加一行('绿字', 绿字('绿字'))
画板.添加一行('绿底', 绿底('绿底'))
画板.添加一行('黄字', 黄字('黄字'))

画板.添加一行('黄底', 黄底('黄底'))
画板.添加一行('蓝字', 蓝字('蓝字'))
画板.添加一行('蓝底', 蓝底('蓝底'))

画板.添加一行('洋红字', 洋红字('洋红字'))
画板.添加一行('洋红底', 洋红底('洋红底'))
画板.添加一行('青字', 青字('青字'))
画板.添加一行('青底', 青底('青底'))
画板.添加一行('白字', 白字('白字'))
画板.添加一行('白底黑字', 白底黑字('白底黑字'))

画板.添加一行('黑字', 黑字('黑字'))
画板.添加一行('黑底', 黑底('黑底'))
画板.添加一行('绿底白字', 绿底白字('绿底白字'))

画板.展示表格()

代码运行如下:
DebugInfo 模块彩色文本效果展示
事实上,不同的颜色修饰是可以嵌套的,例如下面的代码将红字进行三重修饰。

# -*- coding:UTF-8 -*-

# region 引入必要依赖
from DebugInfo.DebugInfo import *

# endregion

文本 = 红字('红字')
文本 = 黄字(f'黄字{文本}')
文本 = 蓝字(f'蓝字{文本}')

print(文本)

上面的代码运行效果如下,最内层是红字,中间是黄字,外层是蓝字:DebugInfo模块的文字颜色嵌套修饰


分隔线

DebugInfo模块提供了一个分隔线模板类,可以方便的生成分隔线。分隔线模板支持:

  • 指定符号
  • 指定提示内容
    – 指定对齐方式
  • 修饰颜色
  • 指定长度
    – 提示内容不影响分隔线长度,除非提示内容长于指定的总长度

🎯以下代码中,使用分隔线模板生成了4条分隔线实例,使用 print 函数进行打印

# -*- coding:UTF-8 -*-

# region 引入必要依赖
from DebugInfo.DebugInfo import *

# endregion

print(分隔线模板(), ': 这是默认的分隔线, 符号是 -, 长度是 50, 默认文本颜色')
print()
print(分隔线模板().符号('~ '), ': 这是一个定制的分隔线, 符号是 ~')
print()
print(分隔线模板().符号('-').提示内容('我是分隔线'), ': 这是一个定制的分隔线, 符号是 -, 有提示内容, 但提示内容不影响分隔线的长度')
print()
print(分隔线模板().符号('-').提示内容('我是分隔线').修饰(红字), ': 这是一个定制的分隔线, 符号是 -, 有提示内容, 文本颜色被修饰为红色了')

DebugInfo 模块生成的分隔线效果展示
🎯下面的代码展示了分隔提示文本的对齐操作,和使用效果; 代码生成并打印了三条分隔线,其提示文本分别使用了不同的对齐方式

# -*- coding:UTF-8 -*-

# region 引入必要依赖
from DebugInfo.DebugInfo import *

# endregion

print(分隔线模板().提示内容('提示内容在这里').文本对齐(对齐方式.左对齐), f": 分隔线提示文本是 {黄字('左对齐')} 的")
print()
print(分隔线模板().提示内容('提示内容在这里').文本对齐(对齐方式.居中对齐), f": 分隔线提示文本是 {黄字('居中对齐')} 的")
print()
print(分隔线模板().提示内容('提示内容在这里').文本对齐(对齐方式.右对齐), f": 分隔线提示文本是 {黄字('右对齐')} 的")

DebugInfo 模块 分隔线 提示内容 不同的对齐效果

🎯下面的代码展示了如何控制分隔线的长度; 代码中分别生成了三条分隔线,使用了不同的长度(等效英文空格宽度的数量)

# -*- coding:UTF-8 -*-

# region 引入必要依赖
from DebugInfo.DebugInfo import *

# endregion

print()
print(分隔线模板().提示内容('提示内容在这里'), '这是默认的长度, 50 英文空格宽度')
print()
print(分隔线模板().提示内容('提示内容在这里').总长度(60), '指定分隔线长度为 60 英文空格宽度')
print()
print(分隔线模板().提示内容('提示内容在这里').总长度(80), '指定分隔线长度为 80 英文空格宽度')

DebugInfo 模块提供的不同长度的分隔线的效果


文本对齐,表格对齐

DebugInfo模块提供了文本对齐功能, 基础思想是通过英文空格来进行间隙填充,以使文本内容达到对齐的效果,这可以理解为一个表格。表格提供以下功能:

  • 添加单行
    – 支持修饰
    – 支持字符串内换行符的换行对齐
  • 添加多行
  • 支持分隔行
  • 修饰指定的列
  • 控制对齐的列间距
  • 控制对齐表列宽度
  • 支持左右颠倒表格
  • 支持上下颠倒表格

🎯下面的代码演示了文本对齐的效果,支持中文,英文,数字,符号等各种混合字符串的对齐打印; 代码中构造了一个示例数据,数据是个二维list对象,第一列的同容中包含了中文,英文,日文,数字等内容,成分比较复杂.

# -*- coding:UTF-8 -*-

# region 引入必要依赖
from DebugInfo.DebugInfo import *

# endregion

示例数据 = [['小张', '18745986526'],
            ['刘Sire', '技术宅,大牛'],
            ['中村 くみ子', '一个来自日本的同学, 喜欢学习中文'],
            ['zifang.zhang56', '重名太多,已经排到56号了, gg'],
            ['Kelly Jackson', "I don't know who is it"],
            ['123456', '一串数字']]

画板 = 调试模板()

画板.添加一行('项目', '内容', '->这一行是青色的,是标题哦').修饰行(青字)
for 项目 in 示例数据:
    画板.添加一行(项目[0], 项目[1])

画板.展示表格()

DebugInfo模块文本对齐打印的效果
上图我们可以观察到,打印输出的第二列很整齐的对齐到了一起,不受第一列中内容的影响.
上面的代码和输出中,我们观察到我们对第一行的内容进行了修饰操作,这将使得第一行的内容高亮显示,这个效果可以做为标题的效果使用.

🎯事实上,对齐二维list对象,是可以更灵活的添加到表格行中,如下演示了两种方法

# 方法一: 添加一行(list), 如下
for 数据行 in 示例数据:
    # 数据是个 list 对象
    画板.添加一行(数据行)

# 方法二: 添加多行(list[list]], 如下:
画板.添加多行(示例数据)

🎯表格数据支持左右颠倒操作,例如下面的代码, 以及打印效果

# -*- coding:UTF-8 -*-

# region 引入必要依赖
from DebugInfo.DebugInfo import *

# endregion

示例数据 = [['小张', '18745986526'],
            ['刘Sire', '技术宅,大牛'],
            ['中村 くみ子', '一个来自日本的同学, 喜欢学习中文'],
            ['zifang.zhang56', '重名太多,已经排到56号了, gg'],
            ['Kelly Jackson', "I don't know who is it"],
            ['123456', '一串数字']]

画板 = 调试模板()

画板.添加一行('项目', '内容').修饰行(青字)
画板.添加多行(示例数据)

画板.左右颠倒表格().展示表格()

DebugInfo模块表格左右颠倒操作效果

🎯表格支持指定列间距操作,如下的代码里在准备表格时,指定了第2列的宽度为50,观察其效果:

# -*- coding:UTF-8 -*-

# region 引入必要依赖
from DebugInfo.DebugInfo import *

# endregion

示例数据 = [['小张', '18745986526', '|'],
            ['刘Sire', '技术宅,大牛', '|'],
            ['中村 くみ子', '一个来自日本的同学, 喜欢学习中文', '|'],
            ['zifang.zhang56', '重名太多,已经排到56号了, gg', '|'],
            ['Kelly Jackson', "I don't know who is it", '|'],
            ['123456', '一串数字', '|']]

画板 = 调试模板()

画板.准备表格(列宽控制表=[0, 50])
画板.添加一行('项目', '内容', '参考列').修饰行(青字)
画板.添加多行(示例数据)

画板.展示表格()

我们观察第三列的参考列,可以明显发现第2列的宽度是变宽了(实际上是指定数量的英文空格宽度)
DebugInfo 表格控制列宽

🎯表格支持指定列对齐方式,下面的代码中,我们在准备表格时指定列第2列的对齐方式为 ‘c’: 居中对齐:

# -*- coding:UTF-8 -*-

# region 引入必要依赖
from DebugInfo.DebugInfo import *

# endregion

示例数据 = [['小张', '18745986526', '|'],
            ['刘Sire', '技术宅,大牛', '|'],
            ['中村 くみ子', '一个来自日本的同学, 喜欢学习中文', '|'],
            ['zifang.zhang56', '重名太多,已经排到56号了, gg', '|'],
            ['Kelly Jackson', "I don't know who is it", '|'],
            ['123456', '一串数字', '|']]

画板 = 调试模板()

画板.准备表格(对齐控制串='lc', 列宽控制表=[0, 50])
画板.添加一行('项目', '内容', '参考列').修饰行(青字)
画板.添加多行(示例数据)

画板.展示表格()

观察下图, 第2列的内容相对于其指定的列宽,进行了居中对齐:
DebugInfo 模块表格指定列对齐效果展示

🎯 事实上,表格还支持指定列间距,如下代码指定了第一个列间距为15, 第一个列间距为第2列与第1列之间的间距:

# -*- coding:UTF-8 -*-

# region 引入必要依赖
from DebugInfo.DebugInfo import *

# endregion

示例数据 = [['小张', '18745986526', '|'],
            ['刘Sire', '技术宅,大牛', '|'],
            ['中村 くみ子', '一个来自日本的同学, 喜欢学习中文', '|'],
            ['zifang.zhang56', '重名太多,已经排到56号了, gg', '|'],
            ['Kelly Jackson', "I don't know who is it", '|'],
            ['123456', '一串数字', '|']]

画板 = 调试模板()

画板.准备表格()
画板.添加一行('项目', '内容', '参考列').修饰行(青字)
画板.添加多行(示例数据)

画板.表格列间距 = [15]
画板.展示表格()

DebugInfo 表格指定列间距效果

🎯 表格数据支持上下颠倒操作,例如下面的代码, 以及打印效果

# -*- coding:UTF-8 -*-

# region 引入必要依赖
from DebugInfo.DebugInfo import *

# endregion

示例数据 = [['小张', '18745986526'],
            ['刘Sire', '技术宅,大牛'],
            ['中村 くみ子', '一个来自日本的同学, 喜欢学习中文'],
            ['zifang.zhang56', '重名太多,已经排到56号了, gg'],
            ['Kelly Jackson', "I don't know who is it"],
            ['123456', '一串数字']]

画板 = 调试模板()

画板.添加一行('项目', '内容').修饰行(青字)
画板.添加多行(示例数据)

画板.上下颠倒表格().展示表格()

DebugInfo 表格上下颠倒操作效果展示
我们观察到,第一行的标题行也被调整到了最后一行,这是因为模板中的表格并没有严格的标题概念,所有内容都是普通行,这是需要注意的一点.
这咱情况下,我们把标题行的内容放到其它内容之后添加,再上下颠倒操作,就可以解决.

🎯 表格支持修饰列操作,如下的代码将第2列(列索引号自0开始,所以第2列的列索引号是1,程序猿都懂)修饰为黄色的文字:

# -*- coding:UTF-8 -*-

# region 引入必要依赖
from DebugInfo.DebugInfo import *

# endregion

示例数据 = [['小张', '18745986526', '第3列'],
            ['刘Sire', '技术宅,大牛', '第3列'],
            ['中村 くみ子', '一个来自日本的同学, 喜欢学习中文', '第3列'],
            ['zifang.zhang56', '重名太多,已经排到56号了, gg', '第3列'],
            ['Kelly Jackson', "I don't know who is it", '第3列'],
            ['123456', '一串数字', '第3列']]

画板 = 调试模板()

画板.添加一行('项目', '内容').修饰行(青字)
画板.添加多行(示例数据)

画板.修饰列(1, 黄字).展示表格()

上面的代码在展示表格前进行了修饰列操作,将指定的列使用方法 黄字 进行修饰,效果如下:
DebugInfo 表格修饰列操作效果展示
🎯表格支持添加分隔行操作,以下代码演示了如何为表格添加一个分隔行;
代码先添加了部分数据,然后添加了一个分隔行,然后断续添加剩下的数据,最后展示表格内容

# -*- coding:UTF-8 -*-

# region 引入必要依赖
from DebugInfo.DebugInfo import *

# endregion

示例数据 = [['小张', '18745986526'],
            ['刘Sire', '技术宅,大牛'],
            ['中村 くみ子', '一个来自日本的同学, 喜欢学习中文'],
            ['zifang.zhang56', '重名太多,已经排到56号了, gg'],
            ['Kelly Jackson', "I don't know who is it"],
            ['123456', '一串数字']]

画板 = 调试模板()
画板.添加一行('项目', '内容').修饰行(青字)

# 先添加一部分数据
for 序号 in range(3):
    画板.添加一行(示例数据[序号])

# 这里添加一个分隔行
画板.添加分隔行('-', 绿字)

# 继续添加行数据
for 序号 in range(3, len(示例数据)):
    画板.添加一行(示例数据[序号])

画板.展示表格()

DebugInfo 表格中添加分隔行的效果展示
表格还有一些其它的小功能支持,这里就不列举了,欢迎大家探索.


秒表计时器

DebugInfo模块封装 一个秒表计时器,这是一个装饰器,为快速函数性能测试提示了便利,下面是一个演示代码:

# -*- coding:UTF-8 -*-

# region 引入必要依赖
from DebugInfo.DebugInfo import *

# endregion


@秒表
def 待测试的方法():
    # 打印 hello world 10 次
    for _ in range(10):
        print('hello world')


待测试的方法()

秒表装饰器提供的计算信息如下:
DebugInfo 秒表装饰器展示


语义日期

DebugInfo模块封装了一个语义日期模板,可以为指定的时间提供相对于今天的语义日期翻译.演示代码如下:

# -*- coding:UTF-8 -*-

# region 引入必要依赖
from DebugInfo.DebugInfo import *
from datetime import datetime, timedelta

# endregion

画板 = 调试模板()

画板.添加一行('日期', '', '日期语义').修饰行(青字)
画板.添加一行(datetime.now().date() + timedelta(days=-365 * 5), '->', 语义日期模板(datetime.now() + timedelta(days=-365 * 5)))
画板.添加一行(datetime.now().date() + timedelta(days=-365), '->', 语义日期模板(datetime.now() + timedelta(days=-365)))
画板.添加一行(datetime.now().date() + timedelta(days=-180), '->', 语义日期模板(datetime.now() + timedelta(days=-180)))
画板.添加一行(datetime.now().date() + timedelta(days=-40), '->', 语义日期模板(datetime.now() + timedelta(days=-40)))
画板.添加一行(datetime.now().date() + timedelta(days=-20), '->', 语义日期模板(datetime.now() + timedelta(days=-20)))
画板.添加一行(datetime.now().date() + timedelta(days=-8), '->', 语义日期模板(datetime.now() + timedelta(days=-8)))
画板.添加一行(datetime.now().date() + timedelta(days=-2), '->', 语义日期模板(datetime.now() + timedelta(days=-2)))
画板.添加一行(datetime.now().date() + timedelta(days=-1), '->', 语义日期模板(datetime.now() + timedelta(days=-1)))
画板.添加一行(datetime.now().date() + timedelta(days=-0), '->', 语义日期模板(datetime.now() + timedelta(days=-0)))
画板.添加一行(datetime.now().date() + timedelta(days=1), '->', 语义日期模板(datetime.now() + timedelta(days=1)))
画板.添加一行(datetime.now().date() + timedelta(days=2), '->', 语义日期模板(datetime.now() + timedelta(days=2)))
画板.添加一行(datetime.now().date() + timedelta(days=3), '->', 语义日期模板(datetime.now() + timedelta(days=3)))
画板.添加一行(datetime.now().date() + timedelta(days=9), '->', 语义日期模板(datetime.now() + timedelta(days=9)))
画板.添加一行(datetime.now().date() + timedelta(days=18), '->', 语义日期模板(datetime.now() + timedelta(days=18)))
画板.添加一行(datetime.now().date() + timedelta(days=40), '->', 语义日期模板(datetime.now() + timedelta(days=40)))
画板.添加一行(datetime.now().date() + timedelta(days=180), '->', 语义日期模板(datetime.now() + timedelta(days=180)))
画板.添加一行(datetime.now().date() + timedelta(days=365), '->', 语义日期模板(datetime.now() + timedelta(days=365)))
画板.添加一行(datetime.now().date() + timedelta(days=365 * 4), '->', 语义日期模板(datetime.now() + timedelta(days=365 * 4)))

画板.分隔线.提示内容('语义日期演示').总长度(画板.表格宽度()).修饰(红字).展示()

画板.修饰列(1, 绿字).展示表格()

上述代码构造了18个日期,分别显示了其对应的语义日期,效果如下:
DebugInfo 语义日期模板效果演示


小结

以上就是今天的分享了,比较全面系统的讲述了DebugInfo模块提供的功能,希望大家喜欢.
欢迎讨论.

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

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

相关文章

NGINX相关配置

NGINX相关配置 NGINX配置信息 nginx 官方帮助文档:http://nginx.org/en/docs/Nginx的配置文件的组成部分: 主配置文件:/conf/nginx.conf(/nginx/conf/nginx.conf) 子配置文件: include conf.d/*.conf#事件驱动相关的配置 同步 event { wo…

VMware安装启动windows虚拟机出错 efi vmware virtual ...... No media

本人是在最近一台新电脑想要装windows系统的虚拟机,下载了VMware workstation 17pro,也下载了官方的windows系统镜像iso文件。 但是在开启虚拟机的过程中,出现了类似以下的错误: efi vmware virtual … No media 看到有人说需要下…

OLED透明屏技术:引领品牌营销的视觉革命

在当今竞争激烈的市场中,品牌营销的成功与否关系到企业的生存和发展。 而随着科技的不断进步,新的广告展示技术不断涌现,其中OLED透明屏技术以其独特的视觉效果和创新性的应用在品牌营销领域引起了广泛关注。 那么,尼伽将详细介…

flutter和原生利用pigeon建立通道

首先导入依赖: dependencies: pigeon: ^10.0.0定义一个文件: /// 用于定于flutter和平台的桥接方法 /// HostApi() 标记的,是用于 Flutter 调用原生的方法; /// FlutterApi() 标记的,是用于原生调用 Flutter 的方法&…

pycharm 右键运行代码时总是测试模式运行(run pytest)

*# 问题 使用pycharm时,右键运行代码,结果是这样的: 运行_‘pytesr(xxx.py 内)’ 英语界面可能是这样:run_‘pytesr(xxx.py)’我并不想使用测试模式。如何改回正常模式? 解决办法 本着遇到什么问题就搜什么问题的态…

英语略读三

课文的客观,或者逻辑推理 同增通减 比错 对比选项,找一个明显的区别 防并列,文章再说主语在干嘛干嘛的,但是与答案的角度不一样,是并列的关系 在对比选项,不是证明正确的 具体问题具体分析,but…

ICCV 2023 Oral | 从无约束图像集合中生成新视角的交叉光线神经辐射场

文章链接:https://arxiv.org/abs/2307.08093 代码链接:https://github.com/YifYang993/CR-NeRF-PyTorch.git 01. 介绍 本工作旨在通过从不受限制的图像集合(例如从互联网中爬取的图像)中合成新视角图片,从而提供3D沉浸…

在大规模推荐系统中整合 ML 模型的经验教训

一、说明 在这篇博文中,我们分享了将 Netflix 大规模搜索和推荐系统的多个相关机器学习模型整合到一个统一模型中的系统设计经验。给定不同的推荐用例,许多推荐系统将每个用例视为单独的机器学习任务,并为每个任务训练定制的 ML 模型。相比之…

Linux(基础IO、文件权限、Makefile)

目录 1、man 手册 1.1 汉化 1.2 具体使用 2、文件权限 2.1 权限理解 2.2 文件详细信息查询 2.3 权限更改 3、常用函数接口 3.1 open 3.2 read 3.3 write 3.4 close 3.5 函数使用示例 4、make与Makefile 4.1 make 与 Makefile区别 4.2 Makefile的编写 5、vim简…

windows11系统重装步骤及优化技巧

目录 目录 本文目的 Windows11介绍 Windows下载 和win10对比 重装步骤 系统设置调整 系统备份还原 C盘减肥,空间优化技巧 Java开发工具 本文目的 说明windows11的系统重装步骤,大部分步骤也适用于其他windows版本。常用软件的安装与介绍。系统…

《图解HTTP》——上野 宣

图解HTTP 看完这本书并在此博客下摘录书中的部分知识以便回顾。 第一章 了解Web及网络基础 1.1 使用HTTP协议访问Web Web使用一种名为HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为规范,完成从客户端到服务器端等一系列运作流程。而协…

Compose - 交互组合项

按钮 Button OutLinedButton带外边框、TextButton只是文字、IconButton只是图标形状。 Button(onClick { }, //点击回调modifier Modifier,enabled true, //启用或禁用interactionSource MutableInteractionSource(),elevation ButtonDefaults.elevatedButtonElevation( /…

Docker网络-探索容器网络如何相互通信

当今世界,企业热衷于容器化,这需要强大的网络技能来正确配置容器架构,因此引入了 Docker Networking 的概念。Docker 是一种容器化平台,允许您在独立、轻量级的容器中运行应用程序和服务。Docker 提供了一套强大的网络功能&#x…

【rust/egui】(六)看看template的app.rs:TextEdit

说在前面 rust新手,egui没啥找到啥教程,这里自己记录下学习过程环境:windows11 22H2rust版本:rustc 1.71.1egui版本:0.22.0eframe版本:0.22.0上一篇:这里 TextEdit 文本编辑框 其定义为&#…

【调试经验】Ubuntu22.04 安装和配置MySQL 8.0.34

在安装新版本的MySQL到电脑时,按着网上一些教程执行发现错误繁多,最后索性自己摸索并把服务装好了。自己也整理了一下在操作时的一些,上传分享上来希望能帮助到大家。 目录 正文 安装MySQL 配置MySQL 登录账户 方式1: 默认账户登录 方…

Tableau可视化入门实践-1

目录 Tableau 介绍基础统计图形条形图堆积图直方图饼图环形图 Tableau 介绍 Tableau是一款功能强大的数据可视化和业务智能工具,被广泛应用于各行各业的数据分析和决策支持领域。 Tableau提供了直观友好的用户界面,无需编程和复杂的数据处理技能&#x…

Tensorflow2.0搭建网络八股扩展

目录 一、自制数据集 准备:txt和图片 制作函数 二、断点继训,存取模型 1.读取保存的模型 2.保存模型 3.正确使用 三、参数提取,把参数存入txt 参数提取 四、acc/loss可视化,查看效果 1.前提开启:获取history…

ubuntu学习(六)----文件编程实现cp指令

1 思路 Linux要想复制一份文件通常指令为: cp src.c des.c 其中src.c为源文件,des.c为目标文件。 要想通过文件编程实现cp效果,思路如下 1 首先打开源文件 src.c 2 读src到buf 3 创建des.c 4 将buf写入到des.c 5 close两个文件 2 实现 vi …

并发编程基础知识篇--线程的状态和基本操作

目录 创建线程的四种方式 线程的状态和生命周期 扩展知识 线程的调度 线程状态的基本操作 interrupted 实例 join 实例 sleep 实例 扩展小知识 yield 实例 扩展 创建线程的四种方式 创建线程的四种方式 继承Thread类实现Runnable接口使用Callable和Future创…

博客系统——前端部分

目录 一、博客页面介绍 二、实现博客列表页 1、先实现导航栏 2、页面主体 左侧区域的实现:​编辑 右侧页面的实现:​编辑 博客列表页代码汇总: 三、实现博客详情页 代码实现: 四、实现博客登录页​编辑 五、博客编辑页 …