5 高階函式

2021-09-13 20:52:02 字數 2280 閱讀 3254

map()接受2個引數,乙個函式 , 乙個iterable,返回iterator

def f(x):

return x*x

r = map(f, [1, 2, 3, 4 ,5])

print(list(r)) # 強轉 由於iterator是惰性序列

list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])) # 轉字串

多引數對映:當多個列表元素個數不同時,以最小個數的為基準

list1 = [1, 2, 3, 4]

list2 = [1, 2, 3, 4]

list3 = [1, 2, 3, 4]

list4 = [1, 2, 3, 4]

def addlist(x, y, z, k):

return x + y + z + k

print(list(map(addlist, list1,list2,list3,list4)))

把乙個函式作用在乙個序列[x1, x2, x3, ...]上

reduce(func, iter [,initail]) initail設定為初始值

這個函式必須接收兩個引數,reduce把結果繼續和序列的下乙個元素做累積計算

# 把序列變成整數13579

from functools import reduce

def fn(x,y):

return x*10 + y

print(reduce(fn, [1, 3, 5, 7, 9]))

用於過濾序列 然後根據返回值是true還是false決定保留還是丟棄該元素

def is_odd(n): # 刪除偶數

return n%2 ==1

print(list(filter(is_odd, [1, 2, 4, 5, 7, 10, 15])))

# 返回都是是迭代器

# 把序列中的空字串去掉

def not_empty(s):

return s and s.strip()

print(list(filter(not_empty, ['a', '', 'b ', none, 'c', ' '])))

# 求素數

#計算素數的乙個方法是埃氏篩法

def _odd_iter(): # 構成乙個從3開始的奇數序列

n =1 # 注意這是乙個生成器,並且是乙個無限序列

while true:

n = n + 2

yield n

def _not_divisible(n): # 篩選函式

return lambda x:x%n > 0 #獲得對n取餘不為0的序列(比如刪除所有是2倍數的數字)

def primes(): # 定義乙個生成器,不斷返回下乙個素數

yield 2

it = _odd_iter() # 初始化序列

while true:

n = next(it)

yield n

it = filter(_not_divisible(n), it)

for n in primes():

if n < 1000:

print(n)

else:

break

返回乙個列表,如果對字典sorted,返回乙個列表,列表中的元組存放鍵值對

print(sorted([-36, 5, -12, 9]))

print(sorted([-36, 5, -12, 9], key=abs)) # 按絕對值排序

print(sorted(['bob', 'about', 'zoo', 'credit'], key=str.lower)) # reverse=true

l = [('bob', 75), ('adam', 92), ('bart', 66), ('lisa', 88)]

print(sorted(l, key=lambda t:t[1])) # 按成績排

# 字典按鍵排序

sorted(dict1.items(), key = lambda x:x[0])

# 字典按值排序

sorted(dict1.items(), key = lambda x:x[1])

# a = [,,,]

# 字典沒有.sort方法 而列表可以用

a.sort(key=lambda x:x['年齡'])

python高階5 外層函式 內層函式和閉包

在函式內部定義的函式和外部定義的函式是一樣的,只是他們無法被外部訪問,例如 def f print f def g print g return g 將g定義在函式f內部,防止其他 呼叫g但是如果內部函式引用了外部函式的引數,就沒法把內部函式再移到外部函式的外部,例如 def calc sum ls...

python 函式高階 python 函式高階

形參角度 萬能引數 動態接收位置引數 args 動態接收關鍵字引數 kwargs 的魔性用法 函式定義時 代表聚合。他將所有的位置引數 聚合成乙個元組,賦值給了args 函式定義時 將所有的關鍵字引數聚合成乙個字典中,將這個字典賦給了 kwargs 和 在函式的呼叫時 代表打散 僅限關鍵字引數 de...

Python高階 函式高階

閉包 closure 常規函式中可以在函式的引數中新增引數的預設值來簡化函式的操作,偏函式也可以做到這一點,而且會更加的方便管理函式的操作。通過內建模組functools的partial進行定義和處理 語法結構 新函式名稱 functools.partial 函式名稱,預設賦值引數 例如 全域性函式...