2014-01-21 47 views
2

在在PHP循環我寫對於與while循環的條件comparaison

foreach($vertex['neighbours'] as $n_vertex) 

情況下,它是類似於for循環低於在Python

for n_vertex in vertex['neighbors']: 

同樣在雖然在PHP中環的情況下,我用

while(!empty($my_queue)) 

它是類似於while循環低於在Python

while my_queue: 

如果不是,那麼Python中的for循環和while循環跟隨PHP中的for循環的正確版本是什麼。

+0

這兩個例子都是正確的。對於後者,假設'my_queue'是一個列表,只要my_queue不爲空,它就會評估爲'真'。 –

回答

2

是的,這些是相似的。

他們並不完全相同,但差異不會在大多數代碼無所謂。*

,並直接使用my_queue作爲測試,而不是empty方法/函數,是Python的方式來做到這一點,如在PEP 8中推薦的:

對於序列(字符串,列表,元組),使用空序列爲假的事實。

所以,你已經做得完全正確。

當然,在某些情況下,使用list comprehension或發電機表達式(這在PHP沒有直接的類比)可能比for聲明更簡潔或可讀的,但你永遠不需要使用它們。


*首先,一個Python for循環創建從源的iterator,然後一遍遍呼籲next(it)直到StopIteration上升,這是在PHP中幕後發生的事情非常不同。除非你使用非常奇怪的類型,或者試圖改變迭代期間迭代的對象,否則你將永遠不會注意到它們之間的差異。其次,在Python中,與PHP不同,my_queue在理論上可以是可迭代的,但不是像迭代器那樣的序列,在這種情況下while my_queue:將不起作用。但是,這對於您命名爲my_queue的東西來說不太可能。

-1

你的for循環都很好。他們是相同/相似的。但是while循環彼此不同:

while(!empty($my_queue)) 

正在檢查非空列表並檢查它。另一方面,如果my_queue不是布爾值,則

while my_queue: 

將不工作。希望有所幫助。

+0

錯了。如果'my_queue'是一個序列,'while my_queue:'只要它不是空的就是真的。更一般地說,一個Python'while' /'if'/etc。條件可以採用任何可轉換爲布爾值的值(使用C++術語,因爲它沒有真正的Python術語......),其中包括所有內置/ stdlib序列和提供'__len__'/implement'集合的所有第三方序列。 abc.Sized'。 – abarnert

+0

我假設my_queue是一個列表。我也從這個意義上比較了他們兩個! –

+0

如果'my_queue'是一個列表,正如你所設想的那樣,那麼OP的代碼_will_就可以工作,因爲列表是序列的,因此只要它們不是空的,所以你的答案是錯誤的。 – abarnert