Skip to content

字符串

12191字,阅读约77分钟

字符串是编程中最常用的数据类型之一,用于存储和处理文本数据。在前端开发中,我们经常使用 JavaScript 的字符串来处理 DOM 内容、API 响应等,而 Python 的字符串在数据处理、文件操作等方面同样强大。

创建

在 JavaScript 中,我们可以使用单引号或双引号来创建字符串:

Python 的字符串创建方式类似:

多行字符串

JavaScript 使用模板字面量(反引号)来创建多行字符串:

而 Python 提供了三重引号的优雅方式:

这种三重引号的方式比 JavaScript 的反引号更清晰,特别适合编写文档字符串或 SQL 查询。

格式化操作

JavaScript ES6 引入了模板字面量来处理字符串格式化:

Python 提供了两种主要的字符串格式化方法:format() 方法和 f-string。

format() 方法

format() 方法是传统的 Python 字符串格式化方式,功能强大:

格式化语法详解

Python 的格式化语法使用冒号 : 后跟格式说明符,语法为 {变量:格式说明符}

f-string 语法(推荐)

f-string 是 Python 3.6+ 引入的现代字符串格式化方式,语法更简洁直观:

格式化选项对比表

格式说明符英文含义(帮助理解记忆)中文说明示例输入输出结果
:.2ff = float 浮点数保留2位小数19.99620.00
:.1%% = percent 百分比保留1位小数的百分比0.15615.6%
:.2ee = exponential 指数科学计数法2位小数1234.561.23e+03
:dd = decimal 十进制整数格式4242
:,, = comma 逗号千位分隔符12345671,234,567
:08d0 = zero padding 补零补零到8位4200000042
:>10> = right 右箭头右对齐到10位"hello"" hello"
:<10< = left 左箭头左对齐到10位"hello""hello "
:^10^ = center 居中居中对齐到10位"hello"" hello "

f-string 高级用法

f-string 可以包含表达式、函数调用和复杂的格式化选项:

format() vs f-string 对比

选择建议

  • 优先使用 f-string:语法简洁,性能更好,可读性强
  • 使用 format() 的场景:需要重复使用模板字符串,或在旧版本 Python 中工作

与 JavaScript 对比

  • JavaScript:需要调用 toFixed()、手动计算百分比等
  • Python:内置丰富的格式化选项 :.2f:.1%:.2e

序列特性

这是 Python 字符串的一个重要特性:字符串是字符序列,类似于数组。JavaScript 中字符串也可以像数组一样访问:

Python 的字符串访问方式完全相同:

需要注意的是,Python 没有单独的字符数据类型,单个字符实际上就是长度为 1 的字符串。

长度获取

在 JavaScript 中,我们使用.length属性来获取字符串长度:

Python 则使用len()函数来获取字符串长度:

Python 的函数式方法保持了一致性,因为同样的len()函数也适用于列表、元组等其他数据类型,这体现了 Python 设计的统一性。

索引与切片

JavaScript 中使用.slice()方法进行切片:

Python 的切片语法更简洁:

负索引切片

JavaScript 需要通过计算来实现:

Python 的负索引更直观:

遍历操作

JavaScript 中使用 for 循环遍历:

Python 的语法更简洁:

子字符串检查

JavaScript 中我们使用.includes()方法检查子字符串:

Python 使用更直观的in关键字:

在条件语句中使用

JavaScript 中的条件检查:

Python 的条件检查更简洁:

innot in关键字让代码读起来更像自然语言,这是 Python 的一大优势。

修改操作

大小写转换

JavaScript 的大小写转换:

Python 提供了更丰富的大小写转换选项:

去除空白

JavaScript 的空白处理:

Python 提供了类似功能:

字符串替换

JavaScript 中,replace() 默认只替换第一个匹配项,需要使用 replaceAll() 或正则表达式替换全部:

Python 的 replace() 方法默认就会替换所有匹配项,更符合直觉:

拼接操作

JavaScript 中使用+操作符、+=操作符或模板字面量进行拼接:

Python 支持相似的拼接方式,另外还有三引号多行拼接:

查找与检查

JavaScript 的查找方法:

Python 提供了更多选项:

分割与连接

JavaScript 的分割和连接:

Python 的分割和连接语法相似,但注意 join() 方法的调用方式相反:

字符类型判断

JavaScript 需要使用正则表达式:

Python 提供了便捷的内置方法:

str() 与 repr()

Python 提供了两种字符串显示方式:str() 用于用户友好显示,repr() 用于开发者调试。

repr() 主要用于调试,显示字符串的真实内容:

转义字符

转义字符是用反斜杠 \ 开头的特殊字符序列,用来表示一些无法直接输入或有特殊含义的字符,比如换行符、制表符、引号等。

JavaScript 的转义字符:

Python 的转义字符用法相同:

使用 repr() 查看转义字符

前面我们学了 repr() 方法,它在处理转义字符时特别有用,可以清楚地显示字符串的真实内容:

这样可以清楚地看到:

  • \nprint() 中显示为换行,在 repr() 中显示为 \n 字符
  • \tprint() 中显示为制表符间距,在 repr() 中显示为 \t 字符
  • \" 在字符串中表示双引号字符

常见转义字符表

转义序列含义print() 效果repr() 显示
\"双引号Hello "World""Hello \"World\""
\'单引号It's okay"It\'s okay"
\\反斜杠C:\Users"C:\\\\Users"
\n换行符Line1
Line2
"Line1\\nLine2"
\t制表符A    B"A\\tB"
\r回车符World(覆盖前面内容)"Hello\\rWorld"

重复操作

JavaScript 使用.repeat()方法:

Python 使用*操作符更简洁:

常用方法一览

方法描述示例
f"text {var}"f-string 格式化(推荐)f"Hello {name}"
len(text)获取字符串长度(函数调用)len("hello")5
text[index]索引访问字符(支持负索引)"hello"[1]'e'
text[start:end]切片操作(左闭右开)"hello"[1:4]'ell'
"sub" in text检查子字符串"ll" in "hello"True
text.upper()转为大写"hello".upper()'HELLO'
text.lower()转为小写"HELLO".lower()'hello'
text.title()标题格式(每个单词首字母大写)"hello world".title()'Hello World'
text.strip()去除两端空白" hello ".strip()'hello'
text.replace(old, new)字符串替换(默认全局)"hi hi".replace("hi", "bye")'bye bye'
text.split(sep)分割字符串为列表"a,b,c".split(",")['a', 'b', 'c']
sep.join(list)连接列表为字符串(字符串调用)",".join(['a', 'b'])'a,b'
text.find(sub)查找子字符串位置(未找到返回 -1)"hello".find("ll")2
text.startswith(prefix)检查开头"hello".startswith("he")True
text.endswith(suffix)检查结尾"hello".endswith("lo")True
text.isdigit()是否全为数字"123".isdigit()True
text.isalpha()是否全为字母"abc".isalpha()True
text * n重复字符串"hi" * 3'hihihi'

小结

Python 字符串提供了强大而直观的文本处理能力:

核心特性

  • 不可变性:字符串创建后不可修改,所有操作返回新字符串
  • 序列操作:支持索引访问 text[0] 和切片 text[1:5],负索引更方便
  • 格式化:f-string 语法简洁,功能强大,是首选方案

易与 JavaScript 混淆的点

  • len(text) 获取长度,而非 .length 属性
  • "substring" in text 检查子字符串,比 .includes() 更直观
  • replace() 默认全局替换,无需 replaceAll()
  • " | ".join(list) 连接方式与 array.join() 相反

练习

处理用户输入数据,输出用户卡片:

=========================
    👤 用户信息卡片
=========================
姓名: Zhang Wei
昵称: ZW
邮箱: zhang.wei@gmail.com
手机: 138 0013 8000
=========================
点击查看参考答案

基于 MIT 许可发布