python基礎教程Python 必須瞭解的5種高階特徵
更多python教程請到: 菜鳥教程 https://www.piaodoo.com/
Python 是一種美麗的語言,它簡單易用卻非常強大。但你真的會用 Python 的所有功能嗎?
任何程式語言的高階特徵通常都是通過大量的使用經驗才發現的。比如你在編寫一個複雜的專案,並在 stackoverflow 上尋找某個問題的答案。然後你突然發現了一個非常優雅的解決方案,它使用了你從不知道的 Python 功能!
這種學習方式太有趣了:通過探索,偶然發現什麼。
下面是 Python 的 5 種高階特徵,以及它們的用法。
Lambda 函式
Lambda 函式是一種比較小的匿名函式——匿名是指它實際上沒有函式名。
Python 函式通常使用 def a_function_name() 樣式來定義,但對於 lambda 函式,我們根本沒為它命名。這是因為 lambda 函式的功能是執行某種簡單的表示式或運算,而無需完全定義函式。
lambda 函式可以使用任意數量的引數,但表示式只能有一個。
x = lambda a, b : a * b print(x(5, 6)) # prints '30'x = lambda a : a*3 + 3
print(x(3)) # prints '12'
看它多麼簡單!我們執行了一些簡單的數學運算,而無需定義整個函式。這是 Python 的眾多特徵之一,這些特徵使它成為一種乾淨、簡單的程式語言。
Map 函式
Map() 是一種內建的 Python 函式,它可以將函式應用於各種資料結構中的元素,如列表或字典。對於這種運算來說,這是一種非常乾淨而且可讀的執行方式。
def square_it_func(a): return a * ax = map(square_it_func, [1, 4, 7])
print(x) # prints '[1, 16, 49]'def multiplier_func(a, b):
return a * bx = map(multiplier_func, [1, 4, 7], [2, 5, 8])
print(x) # prints '[2, 20, 56]'看看上面的示例!我們可以將函式應用於單個或多個列表。實際上,你可以使用任何 Python 函式作為 map 函式的輸入,只要它與你正在操作的序列元素是相容的。
Filter 函式
filter 內建函式與 map 函式非常相似,它也將函式應用於序列結構(列表、元組、字典)。二者的關鍵區別在於 filter() 將只返回應用函式返回 True 的元素。
詳情請看如下示例:
# Our numbers numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]Function that filters out all numbers which are odd
def filter_odd_numbers(num):
if num % 2 == 0:
return True
else:
return Falsefiltered_numbers = filter(filter_odd_numbers, numbers)
print(filtered_numbers)
filtered_numbers = [2, 4, 6, 8, 10, 12, 14]
我們不僅評估了每個列表元素的 True 或 False,filter() 函式還確保只返回匹配為 True 的元素。非常便於處理檢查表示式和構建返回列表這兩步。
Itertools 模組
Python 的 Itertools 模組是處理迭代器的工具集合。迭代器是一種可以在 for 迴圈語句(包括列表、元組和字典)中使用的資料型別。
使用 Itertools 模組中的函式讓你可以執行很多迭代器操作,這些操作通常需要多行函式和複雜的列表理解。關於 Itertools 的神奇之處,請看以下示例:
from itertools import *Easy joining of two lists into a list of tuples
for i in izip([1, 2, 3], ['a', 'b', 'c']):
print i('a', 1)
('b', 2)
('c', 3)
The count() function returns an interator that
produces consecutive integers, forever. This
one is great for adding indices next to your list
elements for readability and convenience
for i in izip(count(1), ['Bob', 'Emily', 'Joe']):
print i(1, 'Bob')
(2, 'Emily')
(3, 'Joe')
The dropwhile() function returns an iterator that returns
all the elements of the input which come after a certain
condition becomes false for the first time.
def check_for_drop(x):
print 'Checking: ', x
return (x > 5)for i in dropwhile(should_drop, [2, 4, 6, 8, 10, 12]):
print 'Result: ', iChecking: 2
Checking: 4
Result: 6
Result: 8
Result: 10
Result: 12
The groupby() function is great for retrieving bunches
of iterator elements which are the same or have similar
properties
a = sorted([1, 2, 1, 3, 2, 1, 2, 3, 4, 5])
for key, value in groupby(a):
print(key, value), end=' ')(1, [1, 1, 1])
(2, [2, 2, 2])
(3, [3, 3])
(4, [4])
(5, [5])
Generator 函式
Generator 函式是一個類似迭代器的函式,即它也可以用在 for 迴圈語句中。這大大簡化了你的程式碼,而且相比簡單的 for 迴圈,它節省了很多記憶體。
比如,我們想把 1 到 1000 的所有數字相加,以下程式碼塊的第一部分向你展示瞭如何使用 for 迴圈來進行這一計算。
如果列表很小,比如 1000 行,計算所需的記憶體還行。但如果列表巨長,比如十億浮點數,這樣做就會出現問題了。使用這種 for 迴圈,記憶體中將出現大量列表,但不是每個人都有無限的 RAM 來儲存這麼多東西的。Python 中的 range() 函式也是這麼幹的,它在記憶體中構建列表。
程式碼中第二部分展示了使用 Python generator 函式對數字列表求和。generator 函式建立元素,並只在必要時將其儲存在記憶體中,即一次一個。這意味著,如果你要建立十億浮點數,你只能一次一個地把它們儲存在記憶體中!Python 2.x 中的 xrange() 函式就是使用 generator 來構建列表。
上述例子說明:如果你想為一個很大的範圍生成列表,那麼就需要使用 generator 函式。如果你的記憶體有限,比如使用移動裝置或邊緣計算,使用這一方法尤其重要。
也就是說,如果你想對列表進行多次迭代,並且它足夠小,可以放進記憶體,那最好使用 for 迴圈或 Python 2.x 中的 range 函式。因為 generator 函式和 xrange 函式將會在你每次訪問它們時生成新的列表值,而 Python 2.x range 函式是靜態的列表,而且整數已經置於記憶體中,以便快速訪問。
# (1) Using a for loopv numbers = list()for i in range(1000):
numbers.append(i+1)total = sum(numbers)
(2) Using a generator
def generate_numbers(n):
num, numbers = 1, []
while num < n:
numbers.append(num)
num += 1
return numbers
total = sum(generate_numbers(1000))(3) range() vs xrange()
total = sum(range(1000 + 1))
total = sum(xrange(1000 + 1))
以上就是Python 必須瞭解的5種高階特徵的詳細內容,更多關於python 高階特徵的資料請關注菜鳥教程www.piaodoo.com其它相關文章!