Python 3'的原因;s unquote正在使用chr和int的别名?

Python 3'的原因;s unquote正在使用chr和int的别名?,python,urllib,Python,Urllib,在Python3的函数unquote(from)中: 我们有两个最先执行的行: mychr = chr myatoi = int 及其用法: ... myappend(mychr(myatoi(item[:2], 16)) + item[2:]) ... 如果这两个函数仅用于此函数,为什么要使用它们的别名?它们可以很容易地交换为chr和int这是出于性能原因,因为全局查找和方法查找比

在Python3的函数
unquote
(from)中:

我们有两个最先执行的行:

mychr = chr
myatoi = int
及其用法:

         ...
                myappend(mychr(myatoi(item[:2], 16))
                     + item[2:])
         ...

如果这两个函数仅用于此函数,为什么要使用它们的别名?它们可以很容易地交换为
chr
int

这是出于性能原因,因为全局查找和方法查找比局部变量查找慢得多,因为它们必须访问至少一个字典,其中作为局部变量被列表索引

您可以通过以下方式逆转此优化:

def unquote(s):
    """unquote('abc%20def') -> 'abc def'."""
    list = s.split('%')
    res = [list[0]]
    del list[0]
    for item in list:
        if item[1:2]:
            try:
                res.append(chr(int(item[:2], 16))
                     + item[2:])
            except ValueError:
                res.append('%' + item)
        else:
            res.append('%' + item)
    return "".join(res)

但是,如果在探查器下运行,您会发现它的速度较慢。

最新版本中似乎没有这种情况:@Robᵩ 谢谢分享!我想知道这是为什么。Dan在下面给出的答案似乎给出了一个很好的理由,为什么别名应该在那里。事实上,似乎暗示您正在查看的版本非常旧。(准确地说是2.2.0)。谢谢,很奇怪URL上说它是Python 3。
def unquote(s):
    """unquote('abc%20def') -> 'abc def'."""
    list = s.split('%')
    res = [list[0]]
    del list[0]
    for item in list:
        if item[1:2]:
            try:
                res.append(chr(int(item[:2], 16))
                     + item[2:])
            except ValueError:
                res.append('%' + item)
        else:
            res.append('%' + item)
    return "".join(res)