python中类似f"hello", r"hello" 的用法还有哪些?

在Python中,字符串字面量可以通过前缀修饰以改变其处理方式或语义。除了常见的f"hello"(格式化字符串)和r"hello"(原始字符串),还有以下几种核心用法:

1. b"hello":字节字符串(Bytes Literal)

  • 表示一个字节序列(类型为bytes),而非Unicode字符串。
  • 示例:
    data = b"hello"  # 类型为bytes,存储的是二进制数据
    print(type(data))  # <class 'bytes'>
    
  • 常用于处理二进制数据(如文件、网络传输)。

2. u"hello":Unicode字符串(历史遗留,Python 3中已默认)

  • 在Python 2中用于显式声明Unicode字符串(与普通字符串str区分),但在Python 3中所有字符串默认均为Unicode,因此u前缀不再有实际效果,仅保留兼容性。
  • 示例:
    s = u"hello"  # Python 3中等价于"hello"
    print(type(s))  # <class 'str'>
    

3. 三引号字符串("""'''):多行字符串

  • 使用三引号(单引号或双引号)可定义跨多行的字符串,自动包含换行符和缩进。
  • 示例:
    multi_line = """
    Line 1
    Line 2
      Indented Line
    """
    print(multi_line)
    # 输出:
    # Line 1
    # Line 2
    #   Indented Line
    

4. 组合前缀:fr"hello"rb"hello"

  • 多个前缀可以组合使用(顺序通常为r/f在前,b在后),例如:
    • fr"name: {name}"原始格式化字符串(先处理原始字符串的转义,再格式化)。
    • rb"data"原始字节字符串(字节序列中的\n等不会被转义)。
  • 示例:
    name = "John"
    s = fr"Path: C:\Users\{name}"  # 原始字符串 + 格式化,\U不会被转义为Unicode转义
    print(s)  # 输出:Path: C:\Users\John
    

5. 隐式转义处理:普通字符串的默认行为

  • 无前缀的普通字符串(如"hello")会正常处理转义字符(如\n换行、\t制表符)。
  • 示例:
    s = "Hello\nWorld"  # 包含换行符
    print(s)
    # 输出:
    # Hello
    # World
    

关键区别总结

前缀 类型 特点
f str 格式化字符串,支持{}内嵌入变量或表达式(如f"{name} is {age}")。
r str 原始字符串,反斜杠\视为普通字符(如r"\n"是两个字符)。
b bytes 字节字符串,存储二进制数据(如b"hello")。
u str Python 3中无实际效果(兼容Python 2的Unicode标识)。
"""/''' str 多行字符串,保留换行和缩进。

注意事项

  • 组合前缀顺序frrf是合法的,但rf在逻辑上等价于fr(先处理原始字符串,再格式化)。
  • 字节字符串的转义:在b字符串中,\n等转义字符仍会被转义,但\xHH(十六进制)是有效的(如b"\x48"表示H)。
  • 原始字符串的限制:原始字符串不能以单个反斜杠结尾(如r"\"会报错),因为Python无法确定是否需要转义。

通过这些前缀,Python提供了灵活处理不同场景下字符串需求的能力,从格式化输出到二进制数据处理,覆盖了广泛的使用场景。

posted @ 2025-11-29 13:00  nxhujiee  阅读(0)  评论(0)    收藏  举报