Python 代碼閱讀合集介紹:為什么不推薦Python初學者直接看項目源碼
本篇閱讀的代碼實現了二維數組的初始化功能,根據給定的寬高初始化二維數組。
本篇閱讀的代碼片段來自於30-seconds-of-python。
initialize_2d_list
def initialize_2d_list(w,h, val = None):
return [[val for x in range(w)] for y in range(h)]
# EXAMPLES
initialize_2d_list(2, 2, 0) # [[0,0], [0,0]]
initialize_2d_list
接收二維數組的寬、高和初始值,返回一個二維數組。
函數通過列表推導式和range()
函數生成h
行長度為w
的列表。列表中的元素的初始值由參數val
指定。
[[val for x in range(w)] for y in range(h)]
該列表推導式的第一個部分是生成一個列表,該列表長度為w
,所有的值為val
。第二部分是將第一部分生成的列表作為元素生成一個長度為h
的列表。
range
range
類型表示不可變的數字序列,通常用於在for
循環中循環指定的次數。它有兩種形式:class range(stop)
和class range(start, stop[, step])
。如果省略 step 參數,其默認值為1
。如果省略start
參數,其默認值為0
,如果step
為零則會引發ValueError
。
如果step
為正值,確定range r
內容的公式為r[i] = start + step*i 其中 i >= 0 且 r[i] < stop
。
如果step
為負值,確定range
內容的公式仍然為r[i] = start + step*i,但限制條件改為 i >= 0 且 r[i] > stop
。
如果r[0]
不符合值的限制條件,則該range
對象為空。range
對象確實支持負索引,但是會將其解讀為從正索引所確定的序列的末尾開始索引。