我写的 PHP 中的 for 循环
foreach($vertex['neighbours'] as $n_vertex)
是不是类似于下面Python中的for循环
for n_vertex in vertex['neighbors']:
类似地,我在 PHP 中使用了 While 循环
while(!empty($my_queue))
是不是类似于下面Python中的while循环
while my_queue:
如果不是,那么在 PHP 之后的 Python 中 for 和 while 循环的正确版本是什么。
请您参考如下方法:
是的,这些很相似。
它们并不完全相同,但在大多数代码中差异并不重要。*
并且直接使用 my_queue 作为测试,而不是 empty 方法/函数,是执行此操作的 Pythonic 方式,如 PEP 8 中所推荐:
For sequences, (strings, lists, tuples), use the fact that empty sequences are false.
所以,你做的一切都完全正确。
当然在某些情况下,使用 list comprehension或生成器表达式(在 PHP 中没有直接类比)可能比 for 语句更简洁或更易读,但您永远不需要使用它们。
* 首先,Python for 循环创建一个 iterator从源头开始,然后一遍又一遍地调用 next(it) 直到引发 StopIteration,这与 PHP 中隐藏的情况非常不同。除非您使用非常奇怪的类型,或者试图在迭代期间改变您正在迭代的对象,否则您永远不会注意到其中的区别。其次,在 Python 中,与 PHP 不同,my_queue 理论上可以是可迭代的东西,但不是序列,如迭代器——在这种情况下 while my_queue: 将不起作用.但是,对于您命名为 my_queue 的内容,这不太可能。
