国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python高級特性與幾種函數的講解

2020-01-04 13:35:58
字體:
來源:轉載
供稿:網友

切片

從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,切片同樣適用

iterable、iterator

可迭代,迭代器,集合類型數據可迭代但不是迭代器,可通過iter()轉變為迭代器。

可迭代對象可使用for-in語句遍歷,判斷x是否可迭代:isinstance(x, Iterable)。

列表生產式

高效創建列表,見代碼示例:

# range轉listlist(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'][s.lower() for s in ['Hello', 'World', 'IBM', 'Apple']] # like map

generator

isinstance(generator, Iterable) = True,可使用for-in語句,或者使用next方法。

g = (x * x for x in range(10))next(g) # 0next(g) # 1next(g) # 4for item in g:  print(item) # 9 16 ... 81

generator函數

generator函數本質是一個有狀態的函數,遇到yield語句時會暫時返回。

# 有yield語句,表明時generator函數def gen_fn():  init = 0  while init < 10:    yield init    init += 1  return 'done'call = gen_fn() # 獲得可迭代對象callnext(call) # 0next(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
# map(func, *iterables, ...)i = map(lambda x : x * x, [1, 2, 3]) # 返回Iteratorlist(i) # [1, 4, 9]
  • reduce
from functools import reducereduce(lambda previous, x : previous + x, [1, 2, 3, 4]) # 10
  • filter
i = filter(lambda x : x % 2 == True, [1, 2, 3, 4])list(i) # [1, 3]
  • sorted 默認升序,通過key參數決定排序規則。
sorted([1,3,2], key = lambda x : -x) # [3, 2, 1]

返回函數做回函數返回值

閉包概念:包含環境成分(自由變量)和控制成分的實體(lambda表達式,函數)。

def lazy_sum(*args):  ax = 0  def sum():    nonlocal ax    for n in args:      ax = ax + n    return ax  return sumfn = lazy_sum(1, 2, 3)  # ax + sum構成了閉包fn() # 6fn() # 12

匿名函數

即lambda表達式。

裝飾器

函數包函數的語法糖?

def log(fn):  def call(*args, **kw):    print('call %s():' % fn.__name__)    return fn(*args, **kw)  return call# @log的作用等同now = log(now)@logdef now():  print('2018-03-18')now() # call now(): 2018-03-18

偏函數

把一個函數的某些參數給固定住,返回一個新的函數。類似柯里化,但更強大?

from functools import partialbinary_int = partial(int, base = 2)binary_int('1000000') # 64

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洪江市| 襄汾县| 玉林市| 开平市| 宜阳县| 红河县| 胶南市| 泗水县| 怀集县| 新乡县| 汨罗市| 祁门县| 夏津县| 黄平县| 台江县| 甘孜县| 通许县| 封丘县| 虹口区| 玉门市| 日土县| 师宗县| 阳朔县| 宁化县| 大理市| 蒙自县| 遂川县| 林周县| 习水县| 陵水| 大渡口区| 资兴市| 铁岭县| 运城市| 浦县| 贡嘎县| 石河子市| 渝中区| 古浪县| 安乡县| 建阳市|