Python基础学习笔记(九)——字符串(下)

目录

  • 前言
  • 一、字符串的编码、检测和比较
    • 1. 编码与解码
    • 2. 字符检测与判断
    • 3. 字符串的比较
  • 二、占位符与格式化
    • 1. %型格式化
    • 2. {}型格式化
    • 3. 浮点格式化
    • 4. f-string 格式化
      • 4.1 对象调用
      • 4.2 数字格式
      • 4.3 字符串格式
      • 4.4 功能增强
  • 三、字符驻留机制

前言

  本篇将更深入地介绍字符串的使用和机制,有关字符串的基础内容,见Python基础学习笔记(九)——字符串(上)。

一、字符串的编码、检测和比较

1. 编码与解码

  字符串是由Unicode字符组成的,字符按一定格式转换为字节的过程,称为编码;编码的逆向操作,称为解码

  • encode(encoding, errors):将目标字符串str)转换为指定编码格式的字节对象bytes
  • decode(encoding, errors):将目标字节对象bytes)转换为指定编码格式的字符串str

  以上两个函数实现了文本与二进制数据之间的转换。其中,encoding默认值为"utf-8"errors默认值为"strict"
  encoding的可选参数(不论大小写)列表详见Python基础学习笔记(二)——编码_命名,errors的部分可选参数如下:

  • "strict":检测到非法字符,抛出UnicodeError异常
  • "ignore":忽略非法字符
  • "replace":用特定字符替代非法字符
str_ = 'dandelion的博客'
# GBK编码格式下,1汉字占2字节
en = str_.encode('GBK')
print(en)
de = en.decode('GBK')
print(de)# utf-8编码格式下,1汉字占3字节
en = str_.encode()
print(en)
de = en.decode()
print(de)
b'dandelion\xb5\xc4\xb2\xa9\xbf\xcd'
dandelion的博客b'dandelion\xe7\x9a\x84\xe5\x8d\x9a\xe5\xae\xa2'
dandelion的博客


  • chr(int):将任意进制Unicode码值转换为字符
  • ord(str|bytes):将一个字节对象或字符转换为十进制Unicode码值(不能输入空字符

  charcodeorder函数实现了strint之间的转换。

print(ord(' '.encode()), ord('a'), ord('A'), ord('缪'), ord('0'))
print(chr(255), chr(95))
32 97 65 32554 48
ÿ _


2. 字符检测与判断

  • isidentifier():若字符串中的字符全部为合法标识符,返回True;否则返回False
  • isspace():若字符串中的字符全部为空白符空格、换行、水平制表符),返回True;否则返回False
  • isalpha():若字符串中的字符全部为letter类型(英文字母、汉字等),返回True;否则返回False
  • isdecimal():若字符串中的字符全部为十进制数字字符0~9),返回True;否则返回False
  • isnumeric():若字符串中的字符全部为数字阿拉伯、中文、罗马等),返回True;否则返回False
  • isalnum():若字符串中的字符全部为数字或letter,返回True;否则返回False
print('_dandelion_'.isidentifier())
print(' \t\n'.isspace())
print('dandelion的博客'.isalpha())
print('02'.isdecimal())
print('Ⅱ0二十四'.isnumeric())
print('Muelsyse1103'.isalnum())# 在utf-8编码下,汉字不被视为字母
print('sleep'.encode().isalpha())
print('好困'.encode().isalpha())
True True True True True True
True False


3. 字符串的比较

  从字符串左端开始逐个字符进行比较,若两个字符的Unicode码值(原始值相等,就比较下一个字符,若不相等则确定两串大小关系。当且仅当每个字符都相等时,两串相等

print(ord('1'), ord('2'), ord('3'))
print('112' > '113')
print('212' > '113')
49 50 51
False
True

  常见的Unicode码值有:0-9 -> 48~57A-Z -> 65~90a-z -> 97~122

二、占位符与格式化

  占位符是一种特殊字符,用于表示字符串中将来要填充的值的位置,通常用于字符串格式化。它们是在程序运行时动态生成的,以便将实际值插入到占位符的位置。

1. %型格式化

  最传统的格式化方法,使用%型占位符将变量的值插入到字符串中,格式为:str % {variables}.

  • %d | %i:将整型变量的值插入到字符串中
  • %f:将浮点型变量的值插入到字符串中
  • %s:将字符串型变量的值插入到字符串中

  特定类型的占位符只能传递特定类型的值。

name = input('名字:')
age = int(input('年龄:'))
order = int(input('等阶:'))
coefficient = float(input('强度系数:'))print('我叫%s,一名%d岁的%i阶魔法使,魔力强度系数%f' % (name, age, order, coefficient))

  在上述示例中,用户可以根据实际情况给变量赋值,变量的值根据{variables}中的变量str中的占位符位置一一对应插入到str中,并得到一个特定格式的字符串。

2. {}型格式化

  不限制变量类型的格式化方法,使用{index}型占位符将变量的值插入到字符串中,格式为: str.format(variables).

name = input('名字:')
age = int(input('年龄:'))
order = int(input('等阶:'))
coefficient = float(input('强度系数:'))print('我叫{0},一名{1}岁的{2}阶魔法使,魔力强度系数{3}'.format(name, age, order, coefficient))

  在上述示例中,用户可以根据实际情况给变量赋值,变量的值根据{variables}中的变量str中的占位符索引对应插入到str中,并得到一个特定格式的字符串。

  特别的,若全为占位符为{},插入方式仍为 “位置一一对应”

3. 浮点格式化

  对于%型格式化,浮点型的占位符为%ca.bf.

  其中,c, a, b都是整型c是填充符,默认值为空格整数部分a右对齐参数,作用相当于rjust(a, 'c')函数;小数部分b精度参数,返回保留b位小数(四舍五入)的浮点数。

# 最大精度:保留6位小数
print('%f' % 3.1415926)
# 只对齐,使用最大精度,填充符为0
print('%010f' % 3.1415926)
# 右对齐,默认精度为0
print('%10.f' % 3.1415926)
# 不对齐,精度为3
print('%.3f' % 3.1415926)
# 右对齐,精度为3
print('%10.3f' % 3.1415926)
# 不对齐,默认精度为0
print('%.f' % 3.1415926)
3.141593
003.1415933
3.1423.142
3

  
  对于{}型格式化,浮点型的占位符为{index: ca.b}.

  其中,c, a, b的含义与前者基本一致,区别在于,有小数点.时:

  • b不再为可选参数
  • a的值未传递,或小于等于字符串长,默认值为len+1,即至少左空一格

  并且有{index: a.b}保留b有效数字{index: a.bf}保留b小数

# 最大精度:保留6位小数
print('{0:f}'.format(3.1415926535897932))
# 最大精度:保留16位有效数字
print('{0:}'.format(3.1415926535897932))
# 右对齐,使用最大精度,填充符为0
print('{:025}'.format(3.1415926535897932))
# 左空一格,精度为3
print('{:.3}'.format(3.1415926535897932))
# 右对齐,精度为3
print('{:10.3}'.format(3.1415926535897932))
3.141593
3.141592653589793
000000003.1415926535897933.143.14


4. f-string 格式化

4.1 对象调用

  可直接将变量写入字符串的格式化方法,使用{variable}型占位符将变量的值插入到字符串中,需要前缀fF对字符串进行标识。

# 直接输入
print(f'我考了{100}分')# 变量传递
score = 100
print(f'我考了{score}分')
我考了100

  
  f-string格式化也支持表达式和函数调用

# 平方运算
x = int(input())
print(f"{(lambda x: x**2)(x)}")


4.2 数字格式

  f-string格式化仍遵循上述的浮点格式化机制,并新增了分隔描述符,占位符格式为{decimal:,d}{decimal:_d}.

  其中,decimal十进制整数,_分隔符,表示每三位分隔一次

# 不对齐,保留2位小数
print(f"{3.1415926:.2f}")# 对多位整数按位划分
print(f"{2024114514:,d}")
3.14
2,024,114,514


4.3 字符串格式

  f-string格式化可以规定字符串的对齐格式,占位符格式为{str:fillchar/how/width.len},可以实现:先截断字符串保留指定长度(从左到右),再对齐填充

  其中,fillchar填充符how对齐方式(居中^、左对齐<、右对齐>),width对齐宽度len保留长度

s = "dandelion"# 左对齐:保留长度超过字符串长,不发生截断
print(f"{s:*<20.10}")
# 右对齐:截断后保留5个字符
print(f"{s:*>20.5}")
# 居中:不截断截断
print(f"{s:*^20}")
dandelion***********
***************dande
*****dandelion******


4.4 功能增强

  在Python 3.12版本后,f-string格式化支持引号重用、多行表达式和注释、转义字符

# 引号重用:允许嵌套定义
print(f"{f"{f"{f"{f"{f"{1+1}"}"}"}"}"}")	# 2# 多行表达式和注释:允许跨行,并在行尾添加注释
lst = f"列表:{"; ".join(["1",  # 第1项"2",  # 第2项"3"   # 第3项
])}"# 转义字符:允许在语句内使用反斜杠
print(f"{'\n'}")


三、字符驻留机制

  字符驻留机制是一种优化技术,用于节约内存和提高性能,指的是:

  编译过程中,解释器会将较短的不可变字符串对象保存在内存池中,当创建新的字符串时,首先检查该字符串是否已经存在于内存池中,如果是,则返回已存在的对象的引用,也就是把内存地址赋给新变量,而不是开辟一个新空间。

  其中,较短的字符串一般指符合标识符或长度不超过1的字符串。 intern()函数还可以显式地将一个字符串对象添加到内存池中,以便进行字符驻留。

  特别的,Pycharm对该编译机制进一步优化后,所有相同的字符串id均相同。

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

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

相关文章

高边坡监测常用的主要仪器设备

随着人类的发展&#xff0c;近几年由于人类生活生产的破坏&#xff0c;地球环境不断恶化。鉴于这一现象&#xff0c;监测行业也随之应运而生。常见的监测类型有&#xff1a;边坡监测&#xff0c;地灾监测&#xff0c;水库监测&#xff0c;大坝监测&#xff0c;矿山监测&#xf…

Linux完整版命令大全(十三)

git(gnu interactive tools) 功能说明&#xff1a;文字模式下的文件管理员。 语  法&#xff1a;git补充说明&#xff1a;git是用来管理文件的程序&#xff0c;它十分类似DOS下的Norton Commander&#xff0c;具有互动式操作界面。它的操作方法和Norton Commander几乎一样&a…

重生之 SpringBoot3 入门保姆级学习(01、Hello,SpringBoot3)

重生之 SpringBoot3 入门保姆级学习&#xff08;01、Hello&#xff0c;SpringBoot3&#xff09;&#xff09; 1、快速体验1.1 创建项目1.2 导入 SpringBoot3 依赖1.3 导入 SpringBoot3 Web 依赖1.4 代码编写1.5 浏览器测试 1、快速体验 场景&#xff1a;浏览器发送 /hello 请求…

Balabolka-一款完全免费的电子书朗读及文本转语音软件

下载地址&#xff1a;Balabolka Balabolka能够进行简单的文本转语音任务&#xff0c;支持各种语言包&#xff0c;该软件可以读取剪贴板的内容&#xff0c; 可以查看AZW&#xff0c;CHM&#xff0c;DjVu&#xff0c;DOC&#xff0c;EPUB&#xff0c;FB2&#xff0c;LIT&#xff…

Centos安装nvm管理node版本(让安装变得可控又快捷)

Centos安装nvm管理node版本&#xff08;让安装变得可控又快捷&#xff09; 没有找到一个对的人&#xff0c;有可能是你没有走对那条路&#xff0c;也有可能是你没有睁开眼睛&#xff0c;而更大的可能是&#xff0c;你根本就没有出发去找。 安装说明 nvm安装目录&#xff1a;/us…

PG TOAST技术

1.Toast简介&#xff1a; Toast是超长字段在PG的一个存储方式&#xff0c;对于用户来说不用关注这一技术的实现&#xff0c;完全是透明的&#xff0c;它会将大字段值压缩或分散为多个物理行来存储&#xff0c;与Oracle的CLOB&#xff0c;BLOB类似。 2.Toast的存储方式&#xf…

vscode: console.log快捷键设置

webstorm 编辑器自带一个 console.log 的快捷方式&#xff0c;即 .log 然后按回车键就可以了&#xff0c;但是webstorm 用着用着就得找解码&#xff0c;还是 vscode 好啊 那 vscode有类似的方法吗&#xff0c;答案是必然的 在VScode中打开文件 → 首选项 → 用户代码片段 → 在…

JavaScrip四种输出

window.alert()&#xff1a; 使用警告框来显示数据 如&#xff1a; <!DOCTYPE html> <html> <body> <script>window.alert("我来了"); </script></body> </html> 浏览器打开就会显示一个弹窗“我来了” innerHTML&…

人工智能在乳腺癌领域的最新进展|【医学AI·文献速递·05-29】

小罗碎碎念 2024-05-29&#xff5c;文献速递 今天分享的文章&#xff0c;主题是AI乳腺癌。 第三篇文章&#xff0c;个人觉得是今天最有借鉴价值的——临床故事接地气&#xff0c;工科算法赶潮流。这篇文章主要做的事情是利用多模态多组学&#xff0c;去区分乳腺腺病和乳腺癌&a…

Oracle JSON 函数详解与实战

Oracle 数据库提供了丰富的 JSON 函数集&#xff0c;使得开发者可以高效地处理 JSON 数据。本文将详细介绍这些函数&#xff0c;包括它们的语法、使用场景、具体示例&#xff0c;以及在实际项目中的应用。 文章目录 JSON_VALUE语法参数说明示例 JSON_QUERY语法示例 JSON_TABLE语…

AttributeError: ‘Upsample‘ object has no attribute ‘recompute_scale_factor‘

我在运行yolov5 6.0版本的detect.py时遇到该错误&#xff0c;后经调研发现是pytorch版本问题&#xff0c;当我把pytorch1.13版本换到2.2.0版本时&#xff0c;再运行detect.py时没有报错&#xff0c;正常运行。 pip install torch2.2.2 torchvision0.17.2 torchaudio2.2.2 --in…

[Linux打怪升级之路]-进程和线程

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、进程 1…

编程应用怎么使用编程语言:深入探索与实战指南

编程应用怎么使用编程语言&#xff1a;深入探索与实战指南 在数字化时代&#xff0c;编程语言如同魔法语言&#xff0c;赋予了编程应用无限的可能性。然而&#xff0c;对于许多初学者来说&#xff0c;如何有效地使用编程语言来构建应用却是一个充满困惑与挑战的过程。本文将从…

etcd学习笔记

博客参考&#xff1a;K8s组件&#xff1a;etcd安装、使用及原理&#xff08;Linux&#xff09; 分布式系统架构中对一致性要求很高&#xff0c;etcd就满足了分布式系统中的一致性要求&#xff0c;实现了分布式一致性键值对存储的中间件。etcd完整的集群至少需要3台&#xff0c…

Netty-读写原理

归档 GitHub: Netty-读写原理 读原理 参考&#xff1a;选择器-监听-原理 sign_o_002 主要看 NioByteUnsafe#read() 相当于读取底层信道中的字节 io.netty.channel.nio.AbstractNioByteChannel.NioByteUnsafe 下游链处理参考&#xff1a;处理器链-读流程 protected class Ni…

记录——随时更新

姓名&#xff1a;保密 生日&#xff1a;1998.01.09 民族&#xff1a;汉 爱好&#xff1a;吃 以下是我看过的&#xff0c;其中喜欢的&#xff0c;收集起来&#xff0c;以后有喜欢的还会添加&#xff0c;部分遗忘 电视剧 毒牙 非自然死亡(日剧) 校阅部女孩河野悦子(日剧) 失恋…

玩转STM32-直接存储器DMA(详细-慢工出细活)

文章目录 一、DMA介绍1.1 DMA简介1.2 DMA结构 二、DMA相关寄存器&#xff08;了解&#xff09;三、DMA的工作过程&#xff08;掌握&#xff09;四、DMA应用实例4.1 DMA常用库函数4.2 实例程序 一、DMA介绍 1.1 DMA简介 DMA用来提供外设与外设之间、外设与存储器之间、存储器与…

【算法】平衡二叉搜索树的左旋和右旋

树旋转是一种维护平衡树结构的重要操作&#xff0c;主要用于平衡二叉搜索树&#xff08;如AVL树和红黑树&#xff09;。树旋转分为左旋和右旋。 1. 树旋转的定义 左旋 (Left Rotation) 左旋操作将节点及其右子树进行调整&#xff0c;使其右子树的左子节点成为根节点&#xf…

有免费通配符证书吗?哪里可以申请?

市面上的免费SSL证书大多数为单域名证书&#xff0c;如果您的主域名拥有众多子域名&#xff0c;逐一申请单域名SSL证书不太现实&#xff0c;下面为介绍一款永久免费使用的通配符SSL证书申请流程 1 选择免费通配符证书提供商 免费通配符证书申请点击这里直接获取https://www.…

解决移动端使用el-drawer侧边栏展开时触摸滚动的问题

原因分析&#xff1a; 通过 el-drawer 控件实现了底部栏的展示和隐藏&#xff0c;但在移动设备上侧边栏展开时仍然可以通过触摸滑动页面内容&#xff0c;导致用户体验不佳&#xff0c;产生意外的滚动行为。 这是因为在底部栏展开时&#xff0c;未能有效阻止页面内容的触摸滑动…