我知道f弦,但是r弦是什么?还有其他吗?

时间:2018-09-17 03:53:55

标签: python string python-3.x

几周前,我在数据科学加速课程中第一次开始学习python,我们很早就被介绍给f字符串。

简单的代码:

name = 'Tim'
print(f'There are some who call me {name}...')

输出字符串“有人叫我蒂姆...”

出于好奇,我浏览各种软件包时,遇到this one之类的页面,详细介绍了可以在matplotlib中调用的函数,以在生成的图像中渲染类似$ \ LaTeX $的表达式。在示例代码中,它们使用类似于f字符串的方式,但用r代替f。

import matplotlib.pyplot as plt
plt.title(r'$\alpha > \beta$')
plt.show()

生成的(否则为空)图的标题使用的文本格式与使用MathJax或$ \ LaTeX $时使用的希腊字符alpha和希腊字符beta相似。


我的问题如下:

r弦到底是什么,它与f弦相比如何? r字符串是否专门用于matplotlib的mathtext和usetex?

除了f字符串和r字符串外,还有其他我应该熟悉或意识到的其他著名的相似字符串变体或替代品吗?

1 个答案:

答案 0 :(得分:5)

  1. r字符串是原始字符串。
    • 它忽略转义字符。例如,"\n"是包含换行符的字符串,而r"\n"是包含反斜杠和字母n的字符串。
    • 如果您想将其与f字符串进行比较,则可以将f字符串视为“包含电池”。它在转义字符和执行任意表达式的能力方面具有很大的灵活性。另一方面,R弦被精简了。
    • 就实际使用事物而言,如果要将字符串传递到使用一堆怪异字符或自己转义的其他东西中,则通常将使用r字符串,这样您就不必思考要使一切正常工作,您真的需要多少个反斜杠就太难了。在您的示例中,他们至少需要r字符串才能使\a位正常工作。
  2. 由于您使用的是f字符串,因此我假设您至少具有Python 3.6。并非所有这些选项都适用于较早的版本,但以下任何前缀在Python 3.6+中均有效,并且可以使用大写和小写形式:r, u, f, rf, fr, b, rb, br
    • b字符串是二进制文字。在Python 2中,它们什么也不做,只有存在才使源代码与Python 3兼容。在Python 3中,它们允许您创建bytes object。字符串可以看作是底层字节的视图,通常在允许哪些组合方面受到限制。类型上的区别有助于防止错误将文本技术盲目地应用于原始数据。在Python 3中,请注意'A'==b'A'False。这些不是一回事。
    • u字符串为unicode literals。在Python 3中,字符串默认情况下是unicode,但是为了与Python 2向后兼容,允许使用u前缀。在Python 2中,默认情况下,字符串是ASCII,而u前缀则允许您包含非-字符串中的ASCII字符。例如,请注意法语短语u"Fichier non trouvé"中的重音字符。
    • 以我编写的那种代码,我几乎不需要r, u, f, b以外的任何东西。甚至b都在那里。其他人每天(大概)都会处理这些前缀。他们不一定是您需要熟悉的任何东西,但是了解它们的存在并能够找到其文档可能是一项很好的技能。

@JamesGibson链接了language specification,使它出现在答案中,而不是在注释中,所以这就是我从中提取前缀列表的位置。根据您的数学背景,正式的语言规范可能会特别有趣-取决于您对代数和数学逻辑的喜爱程度。

即使只是像Forth这样的语义上微不足道的语言,我认为许多程序员也会喜欢编写简短的解释器,并获得有关他们选择的语言如何工作的宝贵见解。