某些方法的python backports

khe*_*lll 2 python methods backport

以下方法是否有任何backport用于python 2.4:

any, all, collections.defaultdict, collections.deque
Run Code Online (Sandbox Code Playgroud)

Tim*_*ker 5

好吧,至少anyall它很简单:

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False

def all(iterable):
    for element in iterable:
        if not element:
            return False
    return True
Run Code Online (Sandbox Code Playgroud)

deque 已经在2.4了.

至于defaultdict,我猜你可以轻松地模仿setdefault().

来自Alex Martelli(和其他人)的引用强烈推荐Python Cookbook:

这就是字典的setdefault方法.假设我们正在构建一个单词到页面数字索引,这是一个将每个单词映射到它出现的页码列表的字典.该应用程序中的关键代码可能是:

def addword(theIndex, word, pagenumber):
    theIndex.setdefault(word, [ ]).append(pagenumber)
Run Code Online (Sandbox Code Playgroud)

此代码等同于更详细的方法,例如:

def addword(theIndex, word, pagenumber):
    if word in theIndex:
        theIndex[word].append(pagenumber)
    else:
        theIndex[word] = [pagenumber]
Run Code Online (Sandbox Code Playgroud)

和:

def addword(theIndex, word, pagenumber):
    try:
        theIndex[word].append(pagenumber)
    except KeyError:
        theIndex[word] = [pagenumber]
Run Code Online (Sandbox Code Playgroud)


aar*_*ing 5

蒂姆指出,all并且any是微不足道的.defaultdict并不困难.我相信这是一个可以通过的实现.它本质上是将文档转换为代码.

更新:删除了三元表达式,因为我记得那不是2.4

class defaultdict(dict):
     def __init__(self, default_factory, *args, **kwargs):
         super(defaultdict, self).__init__(*args, **kwargs)
         self.default_factory = default_factory

     def __missing__(self, key):
         try:
             self[key] = self.default_factory()
         except TypeError:
             raise KeyError("Missing key %s" % (key, ))
         else:
             return self[key]

     def __getitem__(self, key):
         try:
             return super(defaultdict, self).__getitem__(key)
         except KeyError:
             return self.__missing__(key)
Run Code Online (Sandbox Code Playgroud)

如果您只是用它来构建一个字典,那么您可能想要将EAFP更改为LBYL __getitem__.现在,它已经过优化,可以构建dict,然后使用它一段时间进行大量的非错过查找.

deque会变得更加强硬.我希望我有时间这样做只是因为它可能是我最喜欢的收藏品,但它并非无足轻重.没关系.刚刚阅读Tims的帖子.你有你的愿望.