2015-09-23 25 views
0
從Django的樣品

這裏,在Python或Django For循環之前的主體?

latest_question_list = Question.objects.order_by('-pub_date')[:5] 
output = ', '.join([p.question_text for p in latest_question_list]) 

爲什麼之前的for循環p.question

+5

這是Python的一個功能,名爲[list comprehensions](https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions)。 –

回答

0

[p.question_text for p in latest_question_list]代碼,意味着一個新的數組將被創建並在陣列中的元素將是每個元件的question_text屬性中latest_question_list

更多here

3

Python支持一個概念,稱爲列表解析。它可以用來以非常自然,簡單的方式構建列表,就像數學家用來做的那樣。

以下是在數學中描述列表(或集合,元組或向量)的常用方法。

S = {x² : x in {0 ... 9}} 
V = (1, 2, 4, 8, ..., 2¹²) 
M = {x | x in S and x even} 

你可能從數學中知道上述事情。在Python中,您可以像數學家一樣編寫這些表達式,而不必記住任何特殊的隱含語法。

這是你如何做到上面的Python:

>>> S = [x**2 for x in range(10)] 
>>> V = [2**i for i in range(13)] 
>>> M = [x for x in S if x % 2 == 0] 
>>> 
>>> print S; print V; print M 
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096] 
[0, 4, 16, 36, 64] 

瞭解更多關於列表綜合here

+0

只要在Python 3中添加(ISTR也是2.7),也可以使用字典理解,如'{j:str(j)for j in range(4)}',它會生成 '{0:'0',1 :'1',2:'2',3:'3'}' – nigel222

+0

哦,並設置瞭解:'my_set_of_squares = {j * j for j in range(5,14)}' – nigel222

0

這是簡單的Python語法,它很容易閱讀。 像Python這樣的高級編程語言旨在使語法更清晰,易讀。 由於C語言中的語法,Java必須在循環體內使用循環變量,因此您必須感到困惑。

請注意,這種語法僅用於循環內的1個操作。如果你有多個語句在循環中運行,你將在循環體內執行這些語句。