天天看點

Python的進階用法,效率提高沒毛病!

Python的進階用法,效率提高沒毛病!

任何程式設計語言的進階特征通常都是通過大量的使用經驗才發現的。比如你在編寫一個複雜的項目,并在 stackoverflow 上尋找某個問題的答案。然後你突然發現了一個非常優雅的解決方案,它使用了你從不知道的 Python 功能!

Lambda 函數

Lambda 函數是一種比較小的匿名函數——匿名是指它實際上沒有函數名。

Python 函數通常使用 def a_function_name() 樣式來定義,但對于 lambda 函數,我們根本沒為它命名。這是因為 lambda 函數的功能是執行某種簡單的表達式或運算,而無需完全定義函數。

lambda 函數可以使用任意數量的參數,但表達式隻能有一個。

x = lambda a, b: a + bprint(x(2, 5))
x = lambda y: y * 2 + 1print(x(5))      

看它多麼簡單!我們執行了一些簡單的數學運算,而無需定義整個函數。這是 Python 的衆多特征之一,這些特征使它成為一種幹淨、簡單的程式設計語言。

Map 函數

Map() 是一種内置的 Python 函數,它可以将函數應用于各種資料結構中的元素,如清單或字典。對于這種運算來說,這是一種非常幹淨而且可讀的執行方式。

def pingfang(a):    return a ** 2

x = list(map(pingfang, [1, 2, 3]))print(x)

def add(a, b):    return a + b

x = list(map(add, [1, 2, 3], [4, 5, 6]))print(x)      

Filter 函數

filter 内置函數與 map 函數非常相似,它也将函數應用于序列結構(清單、元組、字典)。二者的關鍵差別在于 filter() 将隻傳回應用函數傳回 True 的元素。

詳情請看如下示例

def filterNumber(a):    
if a % 2 == 0:        
return True    
else:        
return False

x = [1, 2, 3, 4, 5, 6]
res = list(filter(filterNumber, x))
print(res)      

Generator 函數

def gen_example():    print('before any yield')
    yield 'first yield'
    print('between yields')
    yield 'second yield'
    print('no yield anymore')

gen = gen_example()
gen.__next__()  # 第一次調用next# before any yield# 'first yield'
gen.__next__()  # 第二次調用next# between yields# 'second yield'
gen.__next_
type([i for i in range(5)])
type((i for i in range(5)))a = (i for i in range(1, 1001))
for i in a:    print(i)