【问题标题】:Why print returns \\, not a escape character \ in Python为什么 print 返回 \\,而不是 Python 中的转义字符 \
【发布时间】:2021-11-27 05:53:51
【问题描述】:

下面的代码打印表情符号,这 ???? :

print('\U0001F602')
print('{}'.format('\U0001F602'))

但是,如果我像下面这样使用\,它会打印\U0001F602

print('\{}'.format('U0001F602'))

为什么print('\{}'.format())返回\\,而不是转义字符,即\

我一直在查看this 并在 Google 中搜索过,但找不到正确的答案。

【问题讨论】:

  • '\U0001F602' 在编译期间进行评估,并且以\U 开头的字符串文字对编译器具有特殊含义。 '\{}'.format('U0001F602') 在运行时被评估(无论如何都应该用转义的反斜杠写成'\\{}'.format('U0001F602')

标签: python string format encode


【解决方案1】:

参考String and Bytes literals,当python在编译程序时在字符串文字中看到反斜杠时,它会查看下一个字符以查看如何对以下字符进行转义。在第一种情况下,以下字符是U,所以 python 知道它是一个 unicode 转义。在最后一种情况下,它看到{,意识到没有转义,只是发出反斜杠和{ 字符。

print('\{}'.format('U0001F602')) 中有两个不同的字符串文字'\{}''U0001F602'。第一个字符串将在运行时使用 .format 解析,这根本不会使结果成为字符串文字 - 它是一个复合值。

【讨论】:

    【解决方案2】:
    >>> print('\{}'.format('U0001F602'))
    \U0001F602
    

    这是因为您将 {} 作为参数提供给 .format 函数,它只填充花括号内的值。

    它正在打印一个\而不是双重\

    【讨论】:

    • 您好,您提到我正在打印单个\而不是双\"。那为什么('\{}'.format('U0001F602')) == ('\\{}'.format('U0001F602')) 返回 True
    • 你使用了 '==' 运算符,该运算符检查 LHS = RHS 是否,如果是则返回 true,并且两者都返回相同的东西
    • 这样理解,
    • 当你使用 \\ 它认为第一个反斜杠是 excape 序列的开始,\\ 打印一个 \ 而单个 \ 被视为一个字符串
    • 好的,我知道了,谢谢
    猜你喜欢
    • 1970-01-01
    • 2021-10-12
    • 2017-04-05
    • 1970-01-01
    • 2015-11-02
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    相关资源
    最近更新 更多