中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python高級特性與函數的示例分析

發布時間:2021-08-11 15:10:21 來源:億速云 閱讀:106 作者:小新 欄目:開發技術

這篇文章主要介紹Python高級特性與函數的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

切片

從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轉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']
[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) # 0
next(g) # 1
next(g) # 4
for 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() # 獲得可迭代對象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

# map(func, *iterables, ...)
i = map(lambda x : x * x, [1, 2, 3]) # 返回Iterator
list(i) # [1, 4, 9]
  • reduce

from functools import reduce
reduce(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 sum
fn = lazy_sum(1, 2, 3)  # ax + sum構成了閉包
fn() # 6
fn() # 12

匿名函數

即lambda表達式。

裝飾器

函數包函數的語法糖?

def log(fn):
  def call(*args, **kw):
    print('call %s():' % fn.__name__)
    return fn(*args, **kw)
  return call
# @log的作用等同now = log(now)
@log
def now():
  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高級特性與函數的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江门市| 营口市| 维西| 黎川县| 府谷县| 万年县| 祁连县| 临颍县| 兴义市| 晋城| 博罗县| 泽普县| 当涂县| 贞丰县| 冕宁县| 梁河县| 临泽县| 华宁县| 叙永县| 始兴县| 稻城县| 黄石市| 杨浦区| 滦南县| 唐山市| 若尔盖县| 航空| 玛多县| 新乐市| 章丘市| 手游| 甘南县| 凯里市| 武定县| 南陵县| 遵义市| 泸西县| 台山市| 陆川县| 渝北区| 阳新县|