Python中反引号字符的含义

9

我刚开始学习Python,有人能解释以下代码片段中第二行的内容吗?我不理解`num`是什么意思。我试图用单引号'替换反引号字符,但是代码就出错了。请给出详细的解释。

loop_count = 1000000
irn = ''.join([`num` for num in range(loop_count)])
number = int(irn[1]) * int(irn[10]) * int(irn[100]) * int(irn[1000]) * int(irn[10000]) * int(irn[100000]) * int(irn[1000000])
print number

3
“`将它转换为字符串。如果没有它,你会得到一个整数数组,而不是一个字符串数组。” - Jeff
1
它相当于 str(num),我认为。 - Jaime
@Jeff 但为什么是 而不是 '?我试图用 ' 替换,但它出现了错误,就像我用 " 替换时一样。 - Sam Heather
1
加入:'a'.join(['b','c'] -> 'bac' - Gerhard Powell
1
出于好奇,有人试图解决一个Euler问题吗? - Jon Clements
1
请参阅文档中的5.2.9.字符串转换。它们也被称为反引号或反斜杠。 - martineau
2个回答

12

反引号(backticks)是一个废弃的repr()内置函数的别名,因此第二行等价于以下内容:

irn = ''.join([repr(num) for num in range(loop_count)])

使用列表推导式创建一个字符串表示数字的列表,然后使用''.join()将该字符串列表组合成单个字符串,因此等效于以下内容:

irn = ''
for num in range(loop_count):
    irn += repr(num)

请注意,这里我使用了 repr() 来保持与反引号的一致性,但通常你会看到使用 str(num) 来获取整数的字符串表示形式(它们恰好是等效的)。

3
它们是在什么时候/地方被弃用的? - martineau
2
反引号在Python 3中是SyntaxError,不确定何时决定将其删除,但2.7是最后一个允许使用它们的Python版本。 - Andrew Clark
3
我之所以问是因为2.6和2.7文档中没有提到它已被弃用。在Python 3.0版本的《Python新特性介绍》中的“移除语法”一节中,它说:“移除反引号(使用repr()代替)”,我想这可以被称为最终的不支持行动…… - martineau

2
  1. for num in range(loop_count) 迭代从零到999,999的所有数字。
  2. 使用反引号包裹的num将每个数字转换为字符串,使用repr()函数进行转换。
  3. ''.join(...) 将所有这些字符串合并成一个字符串,没有任何分隔符。
  4. irn = ... 将结果存储在irn中。

1
那么这与执行str(num)是一样的吗? - Sam Heather
3
在这种情况下,是的。 reprstr有略微不同的目的,并且根据类型可以产生不同的文本。 - Zenexer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接