我偶然发现了这件作品:
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允许你以最常见的过程式风格或函数式风格编写,这在大学里很受欢迎。