從list或tuple中取部分元素。
list = [1, 2, 3, 4]
list[0 : 3] # [1, 2, 3]
list[-2 : -1] # -1表示最後乙個,[3, 4]
list[1 :: 2] # index = 1開始,每兩個取乙個[2, 4]
list[:] # 複製list,[1, 2, 3, 4]
# 針對tuple,切片同樣適用
可迭代,迭代器,集合型別資料可迭代但不是迭代器,可通過iter()轉變為迭代器。
可迭代物件可使用for-in語句遍歷,判斷x是否可迭代:isinstance(x, iterable)
。
高效建立列表,見**示例:
# range轉list
list(range(1, 5)) # [1, 2, 3, 4]
[x * x for x in range(1, 5)] # [1, 4, 9, 16]
[x * x for x in range(1, 5) if x % 2 == 0] # [4, 16]
[m + n for m in
'abc'
for n in
'xyz'] # ['ax', 'ay', 'az', 'bx', 'by', 'bz', 'cx', 'cy', 'cz']
isinstance(generator, iterable) = true
,可使用for-in語句,或者使用next方法。
g = (x * x for x in range(10))
next(g) # 0
next(g) # 1
next(g) # 4
for item in g:
print(item) # 9 16 ... 81
generator函式本質是乙個有狀態的函式,遇到yield語句時會暫時返回。
# 有yield語句,表明時generator函式
defgen_fn
(): init = 0
while init < 10:
yield init
init += 1
return
'done'
call = gen_fn() # 獲得可迭代物件call
next(call) # 0
next(call) # 1
# 每次呼叫generator函式,得到的是乙個新的generator
# for-in無法獲得generator的返回值'done'
for item in gen_fn():
print(item) # 0 1 ... 9
引數是函式的函式即是高階函式,可對比數學概念:g(x) = f(x) + 1
,g(x)即高階函式。
# map(func, *iterables, ...)
i = map(lambda x : x * x, [1, 2, 3]) # 返回iterator
list(i) # [1, 4, 9]
from functools import reduce
reduce(lambda previous, x : previous + x, [1, 2, 3, 4]) # 10
i = filter(lambda x : x % 2 == true, [1, 2, 3, 4])
list(i) # [1, 3]
sorted([1,3,2], key = lambda x : -x) # [3, 2, 1]
閉包概念:包含環境成分(自由變數)和控制成分的實體(lambda表示式,函式)。
def
lazy_sum
(*args):
ax = 0
defsum
():nonlocal ax
for n in args:
ax = ax + n
return ax
return sum
fn = lazy_sum(1, 2, 3) # ax + sum構成了閉包
fn() # 6
fn() # 12
即lambda表示式。
函式包函式的語法糖?
def
log(fn):
defcall
(*args, **kw):
print('call %s():' % fn.__name__)
return fn(*args, **kw)
return call
# @log的作用等同now = log(now)
@log
defnow
(): print('2018-03-18')
now() # call now(): 2018-03-18
把乙個函式的某些引數給固定住,返回乙個新的函式。類似柯里化,但更強大?
from functools import partial
binary_int = partial(int, base = 2)
binary_int('1000000') # 64
部落格原文 Python學習之路2
列表合併 列表合併有extend方法和直接 合併,兩者雖然都能合併列表,且結果相同,但是前者合併列表,不會導致最終合併的列表物件記憶體位址號發生變化,後者會導致記憶體位址好的改變,這也就意味著合併後的列表被重新定義 列表排序 按ascall碼排序 列表排序使用sort方法,格式為l.sort key...
Python學習之路2
python標準庫 第三方庫 需要手動安裝 sys模組 os模組 標準庫 print sys.path 列印環境變數 print sys.ar 相對路徑sys.ar 獲取相對路徑 指令碼傳參 os模組 作業系統 os.system dir 查詢目錄,不儲存結果,直接輸出 cmd res os.pop...
python入門學習之路(2)
一.列表的定義以及表達方式 列表是由一系列沒有任何關係的按照某種特定順序排列的元素組成。舉個例子 names jm bob tom print names 二.列表操作 1.訪問列表 列表和陣列很像都是有序組合,如果要訪問列表中的元素,只需要把該元素的位置或索引告訴解析器就可以了,例如 names ...