filter()
函式用於過濾序列,過濾掉不符合條件的元素
語法:filter(function, iterable) 引數
function --
判斷函式。
iterable --
可迭代物件
返回值:
輸出:
objectat0可以用x0000022ec66bb128
>
list
將filter
類中的元素轉化為列表輸出
輸出:[0,2,4,6,8]
程式設計中提到的
lambda
表示式,通常是在需要乙個函式,但是又不想費神去命名乙個函式的
場合下使用,也就是指匿名函式
語法:lambda argument_list: expression
argument_list:
引數,expression:表示式
其中,引數可以是:
表示式可以是:
a,ba=1,b=2
*args
**kwargs
a,b=1,*args空……
表示式可以是: 1
none
a+bsum(a)
1 if a>10 else 0
…….lambda argument_list: expression
表示的是乙個函式。
這個函式叫做lambda函式
lambda
函式有如下特性:
lambda
函式是匿名的:所謂匿名函式,通俗地說就是沒有名字的函式。
lambda
函式沒有名字。
lambda
函式有輸入和輸出:輸入是傳入到引數列表
argument_list
的值,輸出是根據表示式
expression
計算得到的值。
lambda
函式一般功能簡單:單行
expression
決定了lambda
函式不可能完成複雜的邏輯,只能完成非常簡單的功能。由於其實現的功能一目了然,甚至不需要專門的名字來說明。
四種用法:
將lambda函式賦值給乙個變數,通過這個變數間接呼叫該lambda函式。例如,執行語句
add=lambda x, y: x+y
,定義了加法函式lambda x, y: x+y,並將其賦值給變數add,這樣變數add便成為具有加法功能的函式。例如,執行add(1,2),輸出為3
將lambda
函式賦值給
其他函式,從而將其他函式用
該lambda
函式替換
例如,為了把標
準庫time
中的函式
sleep
的功能遮蔽
(mock),我們
可以 在程式初始化
時呼叫:
time.sleep=lambda x:none。這樣
,在後續**
中呼叫time
庫的sleep
函式將不會
執行原有的功能。例如,執行
time.sleep(3)
時,程式不會休眠3秒
鐘,而是什麼都不做。 部分
python
內建函式接收函式作
為引數。典型的此
類內建函式有這些:
另外,部分python庫函式也接收函式作為引數,例如gevent的spawn函式。此時,lambda函式也能夠作為引數傳入。
乙個爭議
支援方認為使用
lambda
編寫的**更緊湊,更
「pythonic」
。反對方認為,
lambda
函式能夠支援的功能十分有限,其不支援多分支程式
if...elif...else...
和異常處理程式
try ...except...
。並且,
lambda
函式的功能被隱藏,對於編寫**之外的人員來說,理解
lambda
**需要耗費一定的理解成本。他們認為,使用
for迴圈等來替代
lambda
是一種更加直白的編碼風格。
列表推導式書寫形式:
[表示式
for
變數in
列表] 或者[
表示式for
變數in
列表if 條件]
舉例:#!/usr/bin/python
# -*- coding: utf-8 -*-
li = [1,2,3,4,5,6,7,8,9]
print [x**2 for x in li]
***********************************
print [x**2 for x in li if x>5]
***********************************
print dict([(x,x*10) for x in li])
***********************************
print [ (x, y) for x in range(10) if x % 2 if x > 3 for y in range(10) if y > 7 if y != 8 ]
***********************************
vec=[2,4,6]
vec2=[4,3,-9]
sq = [vec[i]+vec2[i] for i in range(len(vec))]
print sq
***********************************
print [x*y for x in [1,2,3] for y in [1,2,3]]
***********************************
testlist = [1,2,3,4]
def mul2(x):
return x*2
print [mul2(i) for i in testlist]
結果如下:
[1, 4, 9, 16, 25, 36, 49, 64, 81]
[36, 49, 64, 81]
[(5, 9), (7, 9), (9, 9)]
[6, 7, -3]
[1, 2, 3, 2, 4, 6, 3, 6, 9]
[2, 4, 6, 8]
>>> m = list(range(100))#通過range
函式建立乙個
0-99
的數列,組成乙個
list
賦值給m
>>> m
[0, 1, 2, 3, 4, 5, 6, ……,99]
>>> m[:10]#取前十個數
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> m[-10:]#取後十個數
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
>>> m[10:20]#取前11-20
個數
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> m[:10:2]#前十個數中,每
2個數取乙個
[0, 2, 4, 6, 8]
>>> m[5:15:3]#第6-15
個數中,每
3個數取乙個
[5, 8, 11, 14]
>>> m[::10]#所有的數中,每
10個數取乙個
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> m[:]#什麼都不寫,可以原樣複製乙個
list
[0, 1, 2, 3, 4, 5, 6, 7,……,99]支援切片的:
列表:返回列表
元組:返回元組
字串:返回字串
舉例:編寫乙個函式,實現
strip()
函式功能
Python高階06 列表推導
列表推導是一種從其他列表建立列表的方式,類似於數學中的集合推導。列表推導的使用方式非常簡單,有點類似於for迴圈。x x for x in range 10 0,1,4,9,16,25,36,49,64,81 如果想列印那些能被3整除的平方值呢?這時候可以在列表推導中新增一條if語句 x x for...
Python自學筆記 11 列表推導
用到函式的乙個常見操作是將其用於乙個列表的所有項,並使用結果來建立乙個新的列表。如果我們要生成list 1,2,3,4,5,6,7,8,9,10 能用哪種方法呢?當然最基礎的方法可以參見列表 上 但是,這種只適合項比較少的一些場景,現在我們要生成1到999的列表怎麼辦呢?list range 1,1...
Python 入門 11 列表推導式
系統 windows 7 語言版本 anaconda3 4.3.0.1 windows x86 64 編輯器 pycharm community 2016.3.2 已知列表x,對列表中每乙個元素 2,求新列表 傳統方法 我們可以新建乙個列表,對原列表進行迴圈操作,計算後的元素寫入新列表 這種寫法,功...