什么是 Reddit 链接中的 7n5lu
?
http://www.reddit.com/r/reddit.com/comments/7n5lu/man_can_fly_if_you_watch_one_video_in_2
...它是如何生成的?
更新: @Gerald,我最初认为这是一些ID的混淆。它只是将整数转换为更紧凑的表示形式。我在想,为什么要这样做?为什么不直接使用原始的整数值!
>>> to36(4000)
'334'
>>> to36(4001)
'335'
什么是 Reddit 链接中的 7n5lu
?
http://www.reddit.com/r/reddit.com/comments/7n5lu/man_can_fly_if_you_watch_one_video_in_2
...它是如何生成的?
更新: @Gerald,我最初认为这是一些ID的混淆。它只是将整数转换为更紧凑的表示形式。我在想,为什么要这样做?为什么不直接使用原始的整数值!
>>> to36(4000)
'334'
>>> to36(4001)
'335'
Reddit的源代码已经公开了!生成该字符串的方法如下:
def to_base(q, alphabet):
if q < 0: raise ValueError, "must supply a positive integer"
l = len(alphabet)
converted = []
while q != 0:
q, r = divmod(q, l)
converted.insert(0, alphabet[r])
return "".join(converted) or '0'
def to36(q):
return to_base(q, '0123456789abcdefghijklmnopqrstuvwxyz')
另外,在“Link”类下面:
@property
def _id36(self):
return to36(self._id)
看起来像是线程的唯一标识符。它很可能用于在数据库中查找该线程。
这是一个整数,只是以36进制表示。ID是按顺序生成的。例如,在ID 89
之后的评论是ID 8a
,以此类推。因此,您不需要从URL中获取任何其他信息。
评论、帖子、消息、用户和子版块理论上可以具有相同的ID并逐个计数。您可以通过它们的“全名”来区分它们,这是一种类型的东西,下划线,然后是下划线。
t1
是评论,t2
是用户,t3
是提交,t4
是消息,t5
是子版块,t6
是奖项,ModAction
是管理员操作,ModmailConversation
是modmail对话等。
有关更多信息,请参见API文档。
小备注。
这个例子可能不够充分,但通常将元素添加到列表中
a = []
for i in range(NNN): a.append(i)
a.reverse()
相比于在头部插入,这种方法确实更高效。
a = []
for i in range(NNN): a.insert(0,i)
.
to36(9) == '9' to36(10) == 'a'
- gak