在試圖理解如何使用lambda時,我遇到了一個回覆,其中的招貼說你不能使用lambda來做任何事,你不能使用普通函數。在Python中將lambda翻譯爲普通函數
我一直在努力從Python本身內部調用一個函數,但不是專家,但我正在學習,並且遇到了一些問題,您需要使用遞歸函數,多次調用以獲取肯定的答案。
一個傢伙已經使用lambda函數來做到這一點,我試圖理解它,但我失敗了,所以我雖然如果函數可以使用普通函數來實現,那麼從這一點開始理解lambda會更容易。
讓我們這個句子例如:
print"\n".join(" ".join([(lambda f:(lambda x:f(lambda*r:x(x)(*r)))(lambda x:f(lambda*r:x(x)(*r))))(lambda f:lambda q,n:len(q)<=n and q or f(q[len(q)/2:],n)+f(q[:len(q)/2],n))(k,z+1)for z,k in enumerate(i[:-1].split())]) for i in list(s)[1:])
這已經在Facebook的黑客杯被使用,正如我在圈失去了我解決不了這個問題。
這句話花費了幾句話,讓我們說「#1岩石,它是偉大的」
問題聲明Facebook是:
您已經截獲使用一個有趣的和愚蠢的加密系列變速器方法,你已經設法解密。這些消息只包含空格和小寫英文字符,並按如下加密:對於一個句子中的所有單詞,將第i個單詞(從1開始)的單詞替換爲應用以下遞歸操作f(word,i)生成的單詞, :
如果單詞的長度小於或等於i,則返回單詞 。 否則,返回f(詞的右半部分,i)+ f(詞的左半部分,i)。
如果單詞的長度是奇數,則將其分割爲右側較長。你已經決定與發送消息的人一起玩,並且以他們正在使用的相同風格廣播你自己的消息。
輸入 您的輸入將以整數N開始,然後是換行符,然後是N個測試用例。每個案例由一個只包含空格和小寫字母的未加密句子組成,案例以換行符分隔。句子中不會有前導空格或尾隨空格,並且任何相鄰字符之間最多隻有1個空格字符
輸出 對於每種情況以換行符分隔,輸出應用後的加密句子的內容編碼方法如上所述。您可能會忽略傳統的大寫字母規則並堅持使用全部小寫字母。
約束條件 5≤N≤25 句子將包含不超過100個字符。
有趣的問題(來自facebook的一個)。問題(你已經理解這個解決方案的問題)是n次嵌套lambda表達式,過長的行,短名稱和許多其他事情使它變得難以理解。 – delnan 2011-01-23 23:29:55
您引用的示例並非來自現實世界,而且您也不會提出問題...... – 2011-01-23 23:55:49
這與lambda表達式有關很少,並且更多地與展開代碼混淆有關。 – Falmarri 2011-01-24 00:00:42