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 的条件检查更简洁:

in和not 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() 方法,它在处理转义字符时特别有用,可以清楚地显示字符串的真实内容:

这样可以清楚地看到:

  • \n 在 print() 中显示为换行,在 repr() 中显示为 \n 字符
  • \t 在 print() 中显示为制表符间距,在 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 许可发布