栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Python中将整数转换为最短的url安全字符串?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Python中将整数转换为最短的url安全字符串?

这个答案在本质上与道格拉斯·里德(Douglas Leeder)的相似,但有以下变化:

  • 它不使用实际的base64,因此没有填充字符
  • 它没有将数字先转换为字节字符串(以256为基数),而是将其直接转换为以64为基数,这具有使您可以使用符号字符来表示负数的优点。
        import string    ALPHABET = string.ascii_uppercase + string.ascii_lowercase +     string.digits + '-_'    ALPHABET_REVERSE = dict((c, i) for (i, c) in enumerate(ALPHABET))    base = len(ALPHABET)    SIGN_CHARACTER = '$'    def num_enpre(n):        if n < 0: return SIGN_CHARACTER + num_enpre(-n)        s = []        while True: n, r = divmod(n, base) s.append(ALPHABET[r]) if n == 0: break        return ''.join(reversed(s))    def num_depre(s):        if s[0] == SIGN_CHARACTER: return -num_depre(s[1:])        n = 0        for c in s: n = n * base + ALPHABET_REVERSE[c]        return n

    >>> num_enpre(0)    'A'    >>> num_enpre(64)    'BA'    >>> num_enpre(-(64**5-1))    '$_____'

一些注意事项:

  • 您可以(以 微不足道的方式 )通过将string.digits放在字母表的首位(并使符号字符为“-”)来提高64位基数的可读性。我根据Python的urlsafe_b64enpre选择了执行的顺序。
  • 如果要编码很多负数,则可以使用符号位或一个/两个补码代替符号字符来提高效率。
  • 通过更改字母,您应该能够轻松地使此代码适应不同的基础,将其限制为仅字母数字字符或添加其他“ URL安全”字符。
  • 我建议 不要 在大多数情况下在URI中使用除base 10以外的表示形式-与HTTP的开销相比,它增加了复杂性并使调试更加困难而又没有大量的节省-除非您要使用TinyURL式的外观。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/617262.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号