全网最适合入门的面向对象编程教程:54 Python字符串与序列化-字符串格式化与format方法

全网最适合入门的面向对象编程教程:54 Python 字符串与序列化-字符串格式化与 format 方法

image

摘要:

在 Python 中,字符串格式化是将变量插入到字符串中的一种方式,Python 提供了多种字符串格式化的方法,包括旧式的 % 格式化、新式的 str.format 方法以及 f-string(格式化字符串字面量)。

原文链接:

FreakStudio的博客

往期推荐:

可能是全网最适合入门的面向对象编程教程:Python实现-嵌入式爱好者必看!

全网最适合入门的面向对象编程教程:00 面向对象设计方法导论

全网最适合入门的面向对象编程教程:01 面向对象编程的基本概念

全网最适合入门的面向对象编程教程:02 类和对象的Python实现-使用Python创建类

全网最适合入门的面向对象编程教程:03 类和对象的Python实现-为自定义类添加属性

全网最适合入门的面向对象编程教程:04 类和对象的 Python 实现-为自定义类添加方法

全网最适合入门的面向对象编程教程:05 类和对象的Python实现-PyCharm代码标签

全网最适合入门的面向对象编程教程:06 类和对象的 Python 实现-自定义类的数据封装

全网最适合入门的面向对象编程教程:07 类和对象的Python实现-类型注解

全网最适合入门的面向对象编程教程:08 类和对象的 Python 实现-@property 装饰器

全网最适合入门的面向对象编程教程:09 类和对象的Python实现-类之间的关系

全网最适合入门的面向对象编程教程:10 类和对象的Python实现-类的继承和里氏替换原则

全网最适合入门的面向对象编程教程:11 类和对象的Python实现-子类调用父类方法

全网最适合入门的面向对象编程教程:12 类和对象的 Python 实现-Python 使用 logging 模块输出程序运行日志

全网最适合入门的面向对象编程教程:13 类和对象的 Python 实现-可视化阅读代码神器 Sourcetrail 的安装使用

全网最适合入门的面向对象编程教程:14 类和对象的Python实现-类的静态方法和类方法

全网最适合入门的面向对象编程教程:15 类和对象的Python实现-__slots__魔法方法

全网最适合入门的面向对象编程教程:16 类和对象的Python实现-多态、方法重写与开闭原则

全网最适合入门的面向对象编程教程:17 类和对象的Python实现-鸭子类型与“file-like object“

全网最适合入门的面向对象编程教程:18 类和对象的Python实现-多重继承与PyQtGraph串口数据绘制曲线图

全网最适合入门的面向对象编程教程:19 类和对象的 Python 实现-使用 PyCharm 自动生成文件注释和函数注释

全网最适合入门的面向对象编程教程:20 类和对象的 Python 实现-组合关系的实现与 CSV 文件保存

全网最适合入门的面向对象编程教程:21 类和对象的 Python 实现-多文件的组织:模块 module 和包 package

全网最适合入门的面向对象编程教程:22 异常捕获-异常和语法错误

全网最适合入门的面向对象编程教程:23 异常捕获-抛出异常

全网最适合入门的面向对象编程教程:24 异常捕获现-异常的捕获与处理:try/except语句、文件读写示例、Exception引用

全网最适合入门的面向对象编程教程:25 异常捕获-Python 判断输入数据类型

全网最适合入门的面向对象编程教程:26 异常捕获-上下文管理器和with语句

全网最适合入门的面向对象编程教程:26 异常捕获-上下文管理器和with语句

全网最适合入门的面向对象编程教程:27 异常捕获-Python 中异常层级与自定义异常类的实现

全网最适合入门的面向对象编程教程:28 异常捕获-Python编程原则、哲学和规范大汇总

全网最适合入门的面向对象编程教程:29 异常捕获-断言与防御性编程和help函数的使用

全网最适合入门的面向对象编程教程:29 异常捕获-断言与防御性编程和help函数的使用

全网最适合入门的面向对象编程教程:30 Python的内置数据类型-object根类

全网最适合入门的面向对象编程教程:31 Python的内置数据类型-对象Object和类型Type

全网最适合入门的面向对象编程教程:32 Python的内置数据类型-类Class和实例Instance

全网最适合入门的面向对象编程教程:33 Python 的内置数据类型-对象 Object 和类型 Type 的关系

全网最适合入门的面向对象编程教程:33 Python 的内置数据类型-对象 Object 和类型 Type 的关系

全网最适合入门的面向对象编程教程:34 Python的内置数据类型-Python常用复合数据类型:元组和命名元组

全网最适合入门的面向对象编程教程:35 Python的内置数据类型-文档字符串和__doc__属性

全网最适合入门的面向对象编程教程:36 Python的内置数据类型-字典

全网最适合入门的面向对象编程教程:37 Python常用复合数据类型-列表和列表推导式

全网最适合入门的面向对象编程教程:38 Python常用复合数据类型-使用列表实现堆栈、队列和双端队列

全网最适合入门的面向对象编程教程:39 Python 常用复合数据类型-集合

全网最适合入门的面向对象编程教程:40 Python 常用复合数据类型-枚举和 enum 模块的使用

全网最适合入门的面向对象编程教程:41 Python常用复合数据类型-队列(FIFO、LIFO、优先级队列、双端队列和环形队列)

全网最适合入门的面向对象编程教程:42 Python常用复合数据类型-collections容器数据类型

全网最适合入门的面向对象编程教程:43 Python常用复合数据类型-扩展内置数据类型

全网最适合入门的面向对象编程教程:44 Python内置函数与魔法方法-重写内置类型的魔法方法

全网最适合入门的面向对象编程教程:45 Python实现常见数据结构-链表、树、哈希表、图和堆

全网最适合入门的面向对象编程教程:46 Python函数方法与接口-函数与事件驱动框架

全网最适合入门的面向对象编程教程:47 Python函数方法与接口-回调函数Callback

全网最适合入门的面向对象编程教程:48 Python函数方法与接口-位置参数、默认参数、可变参数和关键字参数

全网最适合入门的面向对象编程教程:49 Python函数方法与接口-函数与方法的区别和lamda匿名函数

全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类

全网最适合入门的面向对象编程教程:51 Python函数方法与接口-使用Zope实现接口

全网最适合入门的面向对象编程教程:52 Python函数方法与接口-Protocol协议与接口

全网最适合入门的面向对象编程教程:53 Python字符串与序列化-字符串与字符编码

更多精彩内容可看:

CM3调试系统简析

肝了半个月,嵌入式技术栈大汇总出炉

Avnet ZUBoard 1CG开发板上手—深度学习新选择

SenseCraft 部署模型到Grove Vision AI V2图像处理模块

比赛获奖的武林秘籍:10 一文速通“大唐杯”全国大学生新一代信息通信技术大赛

比赛获奖的武林秘籍:09 一文速通计算机设计大赛,比赛人必看的获奖秘籍

比赛获奖的武林秘籍:08 一文速通光电设计大赛,电子人必看

比赛获奖的武林秘籍:07 一文速通电子设计大赛,电子人必看的获奖秘籍!

比赛获奖的武林秘籍:06 5 分钟速通比赛路演答辩,国奖选手的血泪经验!

比赛获奖的武林秘籍:05 电子计算机类比赛国奖队伍技术如何分工和学习内容

比赛获奖的武林秘籍:04 电子类比赛嵌入式开发快速必看的上手指南

比赛获奖的武林秘籍:03 好的创意选取-获得国奖的最必要前提

比赛获奖的武林秘籍:02 国奖秘籍-大学生电子计算机类竞赛快速上手的流程,小白必看

比赛获奖的武林秘籍:01 如何看待当代大学生竞赛中“卷”“祖传老项目”“找关系”的现象?

比赛获奖的武林秘籍:00 学科竞赛-工科类大学生绕不开的话题,你了解多少?

文档和代码获取:

可访问如下链接进行对文档下载:

https://github.com/leezisheng/Doc

image

本文档主要介绍如何使用 Python 进行面向对象编程,需要读者对 Python 语法和单片机开发具有基本了解。相比其他讲解 Python 面向对象编程的博客或书籍而言,本文档更加详细、侧重于嵌入式上位机应用,以上位机和下位机的常见串口数据收发、数据处理、动态图绘制等为应用实例,同时使用 Sourcetrail 代码软件对代码进行可视化阅读便于读者理解。

相关示例代码获取链接如下:https://github.com/leezisheng/Python-OOP-Demo

正文

字符串格式化是将变量值插入到字符串中的占位符位置的过程。这使得能够创建动态的文本,其中一些部分可能需要根据不同情况进行替换。

在 Python 中字符串格式化的方式包括 Print 函数输出格式化和 Format 函数格式化。

使用 Print 函数格式化符号实现格式化

常用格式化符号包括:

  • (1)%c:格式化字符及其 ASCII 码;
  • (2)%s:格式化字符串;
  • (3)%d:格式化整数;
  • (4)%u:格式化无符号整型;
  • (5)%o:格式化无符号八进制数;
  • (6)%x:格式化无符号十六进制数;
  • (7)%f:格式化浮点数字,可指定小数点后的精度;
  • (8)%e:用科学计数法格式化浮点数;
  • (9)%g:%d 和 %e 的简写。

示例代码如下所示:

print("%c" % 'a')
print("%s" % "string")
print("%s" % 123)   
print("%d" % 100.0)

运行结果如下:

image

同时转换符格式化 (conversion specifier) 可以引用字典变量。

转换符的格式为 %(mapping_key)flags,mapping_key 指明引用变量的名称,flags 指明转换格式。

示例代码如下:

print('%(language)s has %(number)01d quote types.'% {'language': "Python", "number": 2})

运行结果如下:

image

使用 format()方法进行格式化

内置的字符串类提供了通过使用 PEP 3101 所描述的 format()方法进行复杂变量替换和值格式化的能力。string 模块中的 Formatter 类允许你使用与内置 format()方法相同的实现来创建并定制你自己的字符串格式化行为。

image

str.format()方法和 Formatter 类共享相同的格式字符串语法(虽然对于 Formatter 类来说,其子类可以定义它们自己的格式字符串语法)。任何字符串都可以通过调用 format()方法而编写一个格式化字符串。这个方法返回一个新的字符串,其中的特殊字符将会替换成传入该方法的参数以及关键字参数。format 方法不限定参数数量,它使用我们前面提到的方法传参中*args 和**kwargs 语法。

image

在格式化字符串中被替换的特殊符号是开闭花括号:{和}。我们可以成对地插入,最终其会按照顺序被 str.format 方法中传入的位置参数所替换。

示例代码如下:

template = "Hello {}, you are currently {}." 
print(template.format('Dusty', 'writing'))

运行结果如下:

image

str.format()方法可以使用位置参数或关键字参数来填充占位符。位置参数是按顺序传递的,而关键字参数使用占位符名称来匹配值。

示例代码如下,运行结果同上。

template = "Hello {0}, you are currently {1}."
print(template.format('Dusty', 'writing'))
template = "Hello {name}, you are currently {doing}."
print(template.format(name='Dusty', doing='writing'))

我们不是只能传递字符串变量给 format 方法,任何基本类型,例如可以被打印出来的整数或浮点数都可以。更有趣的是,复杂对象,包括列表、元组、字典以及任意对象都可以使用;在 format 的字符串中我们可以通过索引和对象的属性(方法不行)访问变量。例如在下面的例子中,我们输出一个邮件消息,我们在邮箱地址中将发件人和收件人组合成元组,并将主题和消息存放在字典中,就可以这样来格式化:

emails = ("a@example.com", "b@example.com")
message = {'subject': "You Have Mail!",'message': "Here's some mail for you!"}
template = """ 
From: <{0[0]}> 
To: <{0[1]}> 
Subject: {message[subject]} 
{message[message]}"""
print(template.format(emails, message=message))

我们在传递 emails 元组时传递了一个基于位置的参数,这两个邮箱地址可以通过 0[x]获得,其中 x 可以是 0 或 1,表示元组中第一个或第二个元素。第一个 0 表示传入 format 的第一个位置参数(在这个例子中是 emails 元组)。

我们在传递 message 字典时传递了一个基于关键字的参数,其中通过字符串键名访问字典时,使用 message[subject]和 message[message],注意这里和平常访问字典中值时有所不同,我们不需要加引号。

print(message['subject'])

如果有嵌套的数据结构,我们甚至可以实现多层查询。**这里建议不要这样做,因为这样一来,模板字符串很快就会变得难以理解。**如果我们有一个字典包含了元组,可以这样做,代码运行结果同上:

emails = ("a@example.com", "b@example.com")
message = {'emails': emails,'subject': "You Have Mail!",'message': "Here's some mail for you!"}
template = """ 
From: <{0[emails][0]}> 
To: <{0[emails][1]}> 
Subject: {0[subject]} 
{0[message]}"""
print(template.format(message))

实际上,我们也可以给 format 函数传递任意对象作为参数,然后用点号标记访问对象的属性。在如下代码中,我们使用 format 函数输出了类的名字、描述和属性/方法。

class SensorClass(SerialClass):'''传感器类,继承自SerialClass'''... ...
if __name__ == "__main__":template = '''Class Name : <{0.__name__}>Class Description :  <{0.__doc__}>Class Method and Class Properties : <{0.__dict__}>    '''print(template.format(SensorClass))

运行结果如下所示:

image

通常来说,我们会在想要格式化的对象已经存在的情况下使用这种查询方式,但不会为了在模板中使用对象而创建一个类。

在模板字符串中引入变量确实极具便利性,然而,有时候为了确保输出结果的准确性,我们需要对这些变量进行适当的调整。例如,在进行准确率计算时,我们可能会得到冗长的小数,但在特定的应用场景中,我们并不希望这些详尽的小数点后的数值出现在最终的展示中。

此时,str.format()方法就显得尤为实用。它不仅允许我们灵活地控制输出的格式,还提供了诸多选项以满足不同的格式化需求,如指定小数位数、调整文本对齐方式以及设置填充字符等。通过这些功能,我们可以更加精准地控制输出内容的呈现方式,从而确保信息的传达既准确又符合预期的展示效果。

标准格式说明符的一般形式如下:

format_spec     ::=  [[fill]align][sign]["z"]["#"]["0"][width][grouping_option]["." precision][type]
fill            ::=  <any character>
align           ::=  "<" | ">" | "=" | "^"
sign            ::=  "+" | "-" | " "
width           ::=  digit+
grouping_option ::=  "_" | ","
precision       ::=  digit+
type            ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

image

image

image

这里,type 参数具体含义如下:

(1) s: string, 字符串;
(2) d: decimal integer, 十进制数;
(3) i: integer, 用法同%d;
(4) u: unsigned integer, 无符号十进制数;
(5) f: float, 浮点数(默认保留小数点后6);
(6) F: Float, 浮点数(默认保留小数点后6);
(7) e: exponent, 将数字表示为科学计数法(小写e, 默认保留小数点后6);
(8) E: Exponent, 将数字表示为科学计数法(大写E, 默认保留小数点后6);
(9) o: octal, 八进制数(0-7);
(10) x: hexdecimal, 十六进制数(0-9a-f);
(11) X: Hexdecimal, 十六进进制数(0-9A-F);
(12) g: general format, 通用格式,详见如下...;
(13) G: General format, 通用格式,详见如下...;
(14) %c: character, 将十进制数转换为所对应的unicode;
(15) %r: representation, 调用__repr__魔法方法输出;
(16) %%: 转义%,输出百分号。

具体可看下面示例:

price = 49.95
formatted_price = "The price is {:.2f} dollars.".format(price)
print(formatted_price)

运行结果如下:

image

冒号之后的 0.2f 格式指示符表明,从左向右,对于小于 1 的值,确保小数点左侧有个 0;小数点之后保留两位数字,将输入值格式化为浮点数。

我们也可以通过占位值让每个数字占据特定数量的字符位置。这对于输出表格数据很有用,例如:

orders = [('burger', 2, 5),('fries', 3.5, 1),('cola', 1.75, 3)]
print("PRODUCT    QUANTITY    PRICE   SUBTOTAL")
for product, price, quantity in orders:subtotal = price * quantityprint("{0:10s}{1: ^9d} ${2: <8.2f}${3: >7.2f}".format(product, quantity, price, subtotal))

这里,quantity 变量的格式化操作符{1: ^9d}为例,d 表示这是一个整数值,数字 9 说明这个值需要占据 9 个字符。

但是对于整数来说,默认是用 0 而不是空格来填充的。所以我们在冒号之后添加一个空格作为占位符。插入符号说明数字按照居中方式对齐。运行结果如下:

image

我们也可以使用 < 或 > 选择不同的对齐方式(左对齐/右对齐)。这里,我们对 price 和 subtotal 变量使用相似的指示符。对于 price,我们使用{2: <8.2f};对于 subtotal,我们使用{3: >7.2f}。我们都指定了一个空格作为填充字符,不过用 < 和 > 符号分别说明数字按照长度为 8 和 7 的位置居左和居右对齐。而且,每个浮点数都保留两位小数。

对于不同的数据类型,“类型”字符的不同会导致输出格式的变化。我们已经了解了 s、d 和 f 这三种类型,它们分别用于表示字符串、整数和浮点数。实际上,大部分其他的格式指示符都可以看作是这三种基本类型的变体或扩展。例如,o 类型用于表示八进制整数,而 X 类型则用于表示十六进制整数。此外,n 类型指示符是一个特殊的存在,它允许我们根据本地的习惯对整数进行分隔。这对于浮点数,% 类型指示符则具有特殊的功能,它可以将浮点数乘以 100,从而将其转换为百分数形式。

示例代码如下:

_# 使用千位分隔符_
number = 1234567
formatted_number = "Formatted number: {:,}".format(number)
print(formatted_number)
_# 使用百分比格式_
percentage = 0.25
formatted_percentage = "Formatted percentage: {:.2%}".format(percentage)
print(formatted_percentage)

运行结果如下:

image

值得注意的是,这些标准的格式化操作符不仅可以应用于内置的数据类型,还可以应用于其他对象。对于非标准对象,我们可以定义自己的格式指示符来满足特定的需求。例如,如果我们将 datetime 对象传递给 format,就可以使用那些可用于 datetime.strftime 函数的指示符,例如:

from datetime import datetimenow = datetime.now()
_# 格式化日期和时间_
formatted_date = "Current date and time: {:%Y-%m-%d %H:%M:%S}".format(now)
print(formatted_date)

输出结果如下:

image

需要注意的是:这些指示符必须按照正确的顺序,不过它们都是可选的:首先是填充字符,其次是对齐方式,然后是大小,最后是类型。

::=  [[fill]align][sign]["z"]["#"]["0"][width][grouping_option]["." precision][type]

除了使用标准的格式化操作符,我们也可以通过重写 format 特殊方法来自定义我们自己对象的格式化操作符,可以通过查看如下文档进一步了解更加细节的操作:https://peps.python.org/pep-3101/

image

image

同时,开闭花括号:{和}除了在格式化字符串中作为被替换的特殊符号,花括号符号本身也常用于字符串。我们需要有办法跳过格式化,只作为花括号符号本身出现,而不是被替换。我们可以通过重复两次花括号来实现,例如,我们可以用 Python 来格式化一个基本的 Java 程序:

template = """
public class {0} {{public static void main(String[] args) {{System.out.println("{1}");}}
}}"""
print(template.format("MyClass", "print('hello world')"))

运行结果如下:

image

可以看到输出的类名和内容已经被两个参数所替换,而双花括号被替换为单花括号,结果得到的就是一段合法的 Java 代码。只要在模板中看到{{或}},也就是用于封闭 Java 类和方法定义的符号。我们知道 format 方法会将它们替换为单个的花括号符号,而不是替换为传入 format 方法的参数。

这里,我们也总结了常用的一些格式化标准符号使用方法:

image

总的来说,格式化操作符是 Python 中一个非常强大的工具,它允许我们根据需要灵活地控制数据的输出格式。通过深入了解这些操作符的用法和特点,我们可以编写出更加清晰、易读和高效的代码。

image

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

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

相关文章

解决iPhone无法有效响应问题的指南

当您触摸、滑动和点击屏幕时&#xff0c;iPhone 没有响应或屏幕冻结是很烦人的。不可否认&#xff0c;iPhone 是最好的智能手机之一&#xff0c;但它并不完美。触摸屏冻结是 iPhone 用户面临的最常见问题之一。 好消息是&#xff0c;这个问题通常是由软件错误而不是硬件损坏引…

MySQL的增删查改(基础)一

一.增 方式1&#xff08;简写插入&#xff09;&#xff1a; 语法&#xff1a;insert into 表名 values&#xff08;值&#xff0c;值&#xff0c;值……&#xff09;; 这里insert into 代表要插入一条新数据行&#xff0c;values后面就是该行的值&#xff0c;其中后面的值的…

C++20中头文件concepts的使用

<concepts>是C20中新增加的头文件&#xff0c;此头文件是concepts库的一部分&#xff0c;主要用于模板编程、泛型编程。包括 1.core language concepts&#xff1a; std::same_as&#xff1a;指定一种类型(type)与另一种类型是否相同。 std::derived_from&#xff1a;指定…

Apollo Planning2.0决策规划算法代码详细解析 (3):PlanningComponent框架介绍

Apollo Planning 2.0的框架更新涉及多个方面&#xff0c;这些更新旨在提升自动驾驶系统的灵活性、可扩展性和性能。 以下是Apollo Planning 2.0 的框架图&#xff1a; 其中&#xff0c;Apollo的PlanningComponent在自动驾驶系统中扮演着至关重要的角色。其主要作用可以归纳为以…

使用yum为centos系统安装软件以及使用(包含阿里云yum源配置)

centos系统配置阿里云yum源 因为centos7官方停止维护&#xff0c;自带yum源用不了了&#xff0c;所以可以更换成阿里云yum源 方法&#xff1a; 使用root权限执行以下语句 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo CentOS…

番外篇 | 复现AC-YOLOv5,进行自动化织物缺陷检测

前言:Hello大家好,我是小哥谈。我们提出了一种基于AC-YOLOv5的新型纺织缺陷检测方法。将空洞空间金字塔池化(ASPP)模块引入YOLOv5主干网络中,提出了squeeze-and-excitation(CSE)通道注意力模块,并将其引入到YOLOv5主干网络中。🌈 目录 🚀1.基础概念 🚀2.添…

一文上手Kafka【中】

一、发送消息细节 在发送消息的特别注意: 在版本 3.0 中&#xff0c;以前返回 ListenableFuture 的方法已更改为返回 CompletableFuture。为了便于迁移&#xff0c;2.9 版本添加了一个方法 usingCompletableFuture&#xff08;&#xff09;&#xff0c;该方法为 CompletableFu…

【韩顺平Java笔记】第2章:Java概述

按视频的标号来对应小标题&#xff0c;自用学习笔记 文章目录 5. 内容梳理6. 程序举例6.1 什么是程序 7. Java故事7.1 Java诞生小故事7.2 Java技术体系平台 8. Java特性8.1 Java重要特点 9. sublime10. jdk介绍10.1 Java运行机制及运行过程10.1.1 Java虚拟机&#xff08;JVM&a…

【Python】多个dataframe存入excel的不同的sheet表里,而不会被覆盖的方法

我发现&#xff0c;我原来用的多个工作簿存入的方法&#xff0c;发现不太可行&#xff0c;如果我用原来的方法&#xff0c;然后for循环&#xff0c;新的dataframe会把原来的覆盖掉&#xff0c;然后只剩下一个工作薄。原先的代码&#xff1a; with pd.ExcelWriter(file_name ) …

【题解】2022ICPC杭州-K

翻译 原题链接   简述一下就是每次询问重新定义一个字母排序表&#xff0c;问在这个顺序下n个字符串的序列的逆序数是多少。 字典树计算逆序数 先考虑初始状况下&#xff0c;即 a < b < . . . < z a<b<...<z a<b<...<z的情况下&#xff0c;逆序…

[SAP ABAP] 锁对象

在SAP中使用锁对象&#xff0c;用于避免在数据库中插入或更改数据时出现不一致的情况 1.创建锁对象 数据准备 学校表(ZDBT_SCH_437) 使用事务码SE11创建锁对象 点击"锁对象"单选按钮&#xff0c;输入以E开头的锁定对象的名称&#xff0c;然后点击创建按钮 锁对象名…

看480p、720p、1080p、2k、4k、视频一般需要多大带宽呢?

看视频都喜欢看高清&#xff0c;那么一般来说看电影不卡顿需要多大带宽呢&#xff1f; 以4K为例&#xff0c;这里引用一位网友的回答&#xff1a;“视频分辨率4092*2160&#xff0c;每个像素用红蓝绿三个256色(8bit)的数据表示&#xff0c;视频帧数为60fps&#xff0c;那么一秒…

基于VUE的在线茶叶购物网站的设计与实现后端SpringBoot数据库MySQL

目录 1. 项目结构规划 2. 技术选型与工具链 3. 关键功能模块设计 4. 数据库设计 5. 安全性考虑 6. 性能优化建议 在开发一个在线茶叶购物网站之前&#xff0c;了解相关的研究背景和技术发展趋势是非常重要的。以下是一些关键点&#xff0c;可以帮助理解该项目的开发背景和…

召回07 双塔模型——正负样本

正样本&#xff1a; 二八法则&#xff0c;少部分物品占据了大多数点击&#xff0c;会导致正样本大多是热门物品。以一定的概率抛弃一些热门物品&#xff0c;抛弃的概率与样本的点击次数正相关。 负样本&#xff1a; 简单负样本 上述简单负样本是从全体样本中抽样。其中&#…

Python编码系列—Python备忘录模式:掌握对象状态保存与恢复技术

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

[Redis][Zset]详细讲解

目录 0.前言1.常见命令1.ZADD2.ZCARD3.ZCOUNT4.ZRANGE5.ZREVRANGE6.ZRANGEBYSCORE7.ZPOPMAX8.BZPOPMAX9.ZPOPMIN10.BZPOPMIN11.ZRANK12.ZREVRANK13.ZSCORE14.ZREM15.ZREMRANGEBYRANK16.ZREMRANGEBYSCORE17.ZINCRBY 2.集合间操作1.有序集合的交集操作2.ZINTERSTORE3.有序集合的并…

H5响应式的文化传媒娱乐公司HTML网站模板源码

源码名称&#xff1a;响应式的文化传媒娱乐公司HTML网站模板源码 源码介绍&#xff1a;一款自适应H5文化传媒娱乐公司官网源码&#xff0c;源码带有6个H5页面&#xff0c;可用于文化传媒和娱乐公司官网。 需求环境&#xff1a;H5 下载地址&#xff1a; https://www.51888w.c…

Netty系列-5 Netty启动流程

背景 Netty程序有固定的模板格式&#xff0c;以ServerBootstrap为例: public class NettyServer {public void start(int port) {ServerBootstrap serverBootstrap new ServerBootstrap();EventLoopGroup boosGroup new NioEventLoopGroup(1);EventLoopGroup workGroup ne…

Kubernetes配置管理(kubernetes)

实验环境&#xff1a; 在所有节点上拉取镜像&#xff1b;然后把资源清单拉取到第一个master节点上&#xff1b; 同步会话&#xff0c;导入镜像&#xff1a; configmap/secret 配置文件的映射 变量&#xff1a; 基于valuefrom的方式 cm--》pod 特点&#xff1a;变量的名称可…

[JavaEE] IP协议

目录 一、 IP协议 1.1 基本概念 1.2 协议头格式 1.3 特殊IP 二、 地址管理 2.1 网段划分 2.2 CIDR(Classless Interdomain Routing) 2.3 私有IP地址和公网IP地址 2.4 NAT(Network Address Translation)-网络地址转换 2.5 路由选择 三、数据链路层 3.1 认识以太网 3…