python lambda的用法

來源:互聯網
上載者:User

標籤:python   lambda   filter   callback   

歡迎轉載,轉載請註明原文地址:http://blog.csdn.net/majianfei1023/article/details/45269343


lambda函數也叫匿名函數,函數沒有具體的名稱。先來看一個最簡單例子:


def f(x):return x * 2g = lambda x : x * 2

看一下 f 和 g的寫法有什麼不同,f是定義了一個函數,傳進去一個參數x,然後x*2,g是定義了一個lambda,後面跟著一個x(這個就是參數),然後跟著一個 : x * 2 (這就是執行的操作),所以以上的 f = g。它們是完全一樣的東西,你可以這麼寫:f(10),或者這麼寫: g(10)。

但是lambda存在的意義是什麼嗎?其實很簡單,簡單來說, lambda 運算式通常是在需要一個函數,但是又不想費神去命名一個函數的場合下使用。

比如,在Python中有著幾個內建函數,像 map,filter,reduce,我假設你瞭解它們的用法。

出個簡單的不能再簡單的編程題:列印100以內的為3的倍數的數。

你可能會這麼寫:

def func():result = []for i in xrange(100):if i % 3 == 0:result.append(i)return result

或者你比較瞭解Python的特性,可以用filter過濾:

def func(x):return x%3 == 0filter(func,[i for i in xrange(100)])

無論怎樣,我們都需要定義一個函數,或求值,或過濾,能不能不用這麼麻煩,這麼簡單的編程題,每次要定義一個函數,很麻煩,lambda該上場了,

filter(lambda x:x%3==0,[i for i in xrange(100)])

就這麼一句,搞定。注意看這個lambda,跟上面的那個func,做的是完全一樣的操作,只不過是不用去顯示的定義它。


基礎的講完了,下面看看項目中我們怎麼用lambda的吧:

我們需要去尋找某個玩家的資料(find_user_info),在這裡面可能需要做很複雜的操作,比如查詢資料庫(query_database),然後對結果進行邏輯操作(deal_data):

def deal_data(result,fid):  # 這是我們主要邏輯處理的地方,可能增加它的屬性,減少它的屬性,或者刪除它。...def query_database(uid):result = ...return resultdef find_user_info(uid):result = query_database(uid)deal_data(result,uid)

一般來說,find_user_info和query_database是通用介面,我們不太去改動它,我們要做的就是對不同的操作改動deal_data。比如,我要改它的名字,或者,我要給它加100金幣,怎麼處理呢,參數不夠,那好,在find_user_info()裡面加個類型,在deal_data裡面加各種條件判斷,跳轉到各個具體的處理函數,一看就不是好的代碼。

我們可以用lambda做更通用的處理:

def modify_name(result,fid):...def add_gold(result,fid):...def query_database(uid):result = ...return resultdef find_user_info(uid,callback):result = query_database(uid)callback(result)find_user_info(uid,lambda result:deal_data(result,fid))

修改find_user_info的參數,加個call_back,然後我們調用的時候這個call_back就是一個lambda,我們要改名,deal_data替換成modify_name,我們要加金幣,那就改成add_gold,只要參數符合要求就可以了,既可以富修改find_user_info,又可以分離我們的不同的處理邏輯。


python lambda的用法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.