python是否自己在列表上执行任务?

时间:2016-09-15 11:18:14

标签: python list dictionary parallel-processing

我偶然发现了这项工作:

def getChild(self, childName):
    for child in self.children :
        if(childName == child.data['name']):
            return child
    return None

就咆哮而言,这段代码暗示了所有关于这个库的说法和知识。

我不是那么深入python,但我不知道正在进行这项任务的狂热pythonic方式是

def getChild(self, childName):
    return (
        [ child for child in self.children
            if child.data['name'] == childName
        ] + [ None ]
        )[0]

或者,为了更好的可读性,

def getChild(self, childName):
    myChildren = dict([
         (child.data['name'],child)
             for child in self.children
    ])
    try:
        return myChildren[childName]
    except:
        return None

除了事实上我仍然不知道如何以及何时缩进以及放置{[(),{{1} }和],我的替代方案总是对}的所有元素进行操作。

python是否认识到这一点并且并行处理数据集,还是它仍然可以顺序通过数组? (因此总是花费比我在该库中找到的简单搜索更长的时间)

随着执行的查找量的增加,当然最好更改库以始终维护子项而不是列表的字典,但除此之外。我想知道python如何解释和处理这段代码。

1 个答案:

答案 0 :(得分:2)

不,没有自动并行化。 Python是关于有效编写代码,而不是使其具有计算效率。还有一个更大的问题:GIL - Global Interpreter Lock。这意味着一次只执行一个线程。因此,在python中并行化CPU密集型任务并不重要。有没有GIL的口译员,但一般的经验法则:如果你不了解GIL,那么你就拥有它。

关于您发布的代码:python允许您以最常见的程序风格或功能风格进行编写,这在大学中很受欢迎。你可以选择任何。