为什么python3不引用chr和int的别名?

2024-05-03 17:03:47 发布

您现在位置:Python中文网/ 问答频道 /正文

在python3的函数unquote(来自http://www.opensource.apple.com/source/python/python-3/python/Lib/urllib.py)中:

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

我们有两条第一行:

mychr = chr
myatoi = int

以及它们的用法:

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

如果这两个函数只在这个函数中使用,为什么要使用它们的别名?它们可以很容易地交换成chrint。你知道吗


Tags: 函数httpdefwwwresitempython3list
1条回答
网友
1楼 · 发布于 2024-05-03 17:03:47

这样做是出于性能原因,因为全局查找和方法查找比局部变量查找慢得多,因为它们必须访问至少一个作为局部变量的列表索引字典。你知道吗

您可以反转此优化,如下所示:

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)

但如果在探查器下运行它,会发现速度较慢。你知道吗

相关问题 更多 >