2012-05-01 70 views
0

LAMBDA是混淆了我一點點,這裏是我的本錢:功能VS拉姆達聲明

lmb = lambda d: datetime.datetime.strptime(d["Date[G]"]+"-"+d["Time[G]"], "%d-%b-%Y-%H:%M:%S.%f") 

如果我寫這樣的功能:

def time(d): 
    t = datetime.datetime.strptime(d["Date[G]"]+"-"+d["Time[G]"], "%d-%b-%Y-%H:%M:%S.%f") 
    return t.strftime("%d-%b-%Y-%H") 

我可以return t.strftime("%d-%b-%Y-%H")

我可以在我的lambda語句中嵌入類似t.strftime("%d-%b-%Y-%H")的事情嗎?

編輯

I`ve嘗試這樣做:

lmb = lambda d: datetime.datetime.strptime(d["Date[G]"]+"-"+d["Time[G]"], "%d-%b-%Y-%H:%M:%S.%f").strftime("%d-%b-%Y-%H") 

但它返回:

AttributeError: 'str' object has no attribute 'strftime'

不使用功能發生..

回答

3

肯定的:

lmb = lambda d: datetime.datetime.strptime(d["Date[G]"]+"-"+d["Time[G]"], "%d-%b-%Y-`%H:%M:%S.%f").strftime("%d-%b-%Y-%H") 

但它很快很有道理的使用功能。

+0

感謝的是,我已經編輯了問題 –

+0

我可以用一個函數,但我真的使用拉姆達聲明是這樣的:在itertools.groupby對於k,G(csvReader,鍵= LMB) –

+0

@Fingertwist我複製/粘貼你的新版本,我沒有得到錯誤。您可以將函數傳遞給groupby,函數和lambda完全相同。 –

3

是,你可以這樣做:

lmb = lambda d: datetime.datetime.strptime(d["Date[G]"]+"-"+d["Time[G]"], "%d-%b-%Y-%H:%M:%S.%f").strftime("%d-%b-%Y-%H") 

我測試了這個關於Python 2.7:

>>> lmb = lambda d: datetime.datetime.strptime(d["Date[G]"]+"-"+d["Time[G]"], "%d-%b-%Y-%H:%M:%S.%f").strftime("%d-%b-%Y-%H") 
>>> lmb({"Date[G]": "22-Apr-2012", "Time[G]": "07:23:24.123"}) 
'22-Apr-2012-07'