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



我偶然发现了这件作品:

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

就rant而言,这段代码暗示了关于这个库的所有要说和知道的东西。

我对python不是很了解,但我认为处理这个任务的标准python方法是

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

除了我仍然不知道如何以及何时缩进以及将{, [, (, ), ]}放在哪里的事实之外,我的替代方案总是对self.children的所有元素进行操作。

python是否识别到这一点并并行地处理数据集,还是仍然按顺序处理数组?(因此总是比我在该库中找到的简单搜索时间更长)

由于执行了大量的查找,当然最好更改库以始终维护子对象的字典而不是列表,但这不是重点。我想知道python是如何解释和处理这些代码的。

不,没有自动并行。Python是关于高效地编写代码,而不是使其具有计算效率。还有一个更大的问题:GIL -全局解释器锁。这意味着一次只执行一个线程。所以在python中并行化CPU密集型任务没有什么意义。也有没有GIL的解释器,但一般的经验法则是:如果你不知道GIL,那么你有它。

关于你发布的代码:python允许你以最常见的过程式风格或函数式风格编写,这在大学里很受欢迎。

最新更新