1. 程式人生 > >python中lambda的另類使用

python中lambda的另類使用

帶if/else:

( lambda x, y: x if x < y else y )( 1, 2 )

科裡化:

( lambda x: ( lambda y: ( lambda z: x + y + z  )( 1 ) )( 2 ) )( 3 )

遞迴:

func = lambda n: 1 if n == 0 else n * func( n - 1 )
func( 5 )

f = lambda func, n: 1 if n == 0 else n * func( func, n - 1 )
print f( f, 4 )

構建邱奇編碼:

true = lambda x: lambda y: x

false = lambda x: lambda y: y

if_then_else = lambda a: lambda b: lambda c: ( a )( b )( c )

zero = lambda f: lambda x: x

succ = ( lambda n: lambda f: lambda x:
         f( n( f )( x ) ) )

one = succ( zero )

plus_one = lambda x: x + 1

add = ( lambda m: lambda n: lambda f: lambda x:
        n( f )( m( f )( x ) ) )

mult = ( lambda m: lambda n: lambda f: lambda x:
         n( m( f ) )( x ) )

exp = lambda m: lambda n: n( m )

church_numeral = lambda n: n( plus_one )( 0 )

natural_number_to_church = lambda num: zero if num == 0 else \
                           succ( natural_number_to_church( num - 1 ) )

execute = lambda s: s + ' = ' + str( eval( s ) )

print execute( 'church_numeral( zero )' )
print execute( 'church_numeral( succ( zero ) )' )
print execute( 'church_numeral( add( one )( succ( one ) ) )' )
print execute( 'church_numeral( mult( succ( one ) )( succ( one ) ) )' )
print execute( 'church_numeral( exp( succ( succ( one) ) )( succ( one ) ) )' )

c200 = natural_number_to_church( 200 )
c222 = natural_number_to_church( 222 )

print execute( 'church_numeral( add( c200 )( c222 ) )' )
print execute( 'church_numeral( if_then_else( true )( zero )( one ) )' )
print execute( 'church_numeral( if_then_else( false )( zero )( one ) )' )


相關推薦

pythonlambda使用

帶if/else: ( lambda x, y: x if x < y else y )( 1, 2 ) 科裡化: ( lambda x: ( lambda y: ( lambda z

python的元(metaclass)

優先 裝飾器 target {} pass get tac 搜索 items 認識python中元類的準備工作。 1,首先需要明白一個概念就是python中一切皆為對象。 input: class Trick(object): pass print type(‘1234

Python的基本型簡介

rip 作用 集合 成了 叠代 如果 增加 下劃線 等號 1、變量 變量不僅可以是數字,還可以是任意數據類型 命名規範:變量是用一個變量名表示,變量名必須是大小寫英文、數字和下劃線_的組合,且不能用數字開頭 python中等號“=”是賦值語句,可以把任意數據類型賦值給變量

pythonlambda使用

title python 定義 pre 易懂 gif port tools for 舉個例子如下: 1 func=lambda x:x+1 2 print(func(1)) 3 #2 4 print(func(2)) 5 #3 6 7 #以上lambda等同於以下函數

python數據型轉換

lac 特殊字符 集合運算 子類 倒數 IE 發生 開始 ron 1、list轉str 假設有一個名為test_list的list,轉換後的str名為test_str 則轉換方法: test_str = "".join(test_list) 例子: 需要註意的是該

Python的元編寫ORM框架

部落格轉載: https://blog.csdn.net/givemefive_y/article/details/79806348 https://blog.csdn.net/eye_water/article/details/78777870 https://www.liaoxue

Python如何獲取屬性的列表

前言 最近工作中遇到個需求是要得到一個類的靜態屬性,也就是說有個類 Type ,我要動態獲取 Type.FTE 這個屬性的值。 最簡單的方案有兩個: ? 1 2 getattr(Type, 'FTE') Type.__dic

Python 的 經典、新式比較(1)(關鍵詞:Python/經典/新式)

經典類中,屬性搜尋處理對所有路徑深度優先,直到繼承樹的頂端,然後從左到右進行; 新式類中,屬性搜尋處理沿著樹層級、以更加廣度優先的方式進行。 新式類的優點:可以避免重複搜尋超類。 直接上程式碼說明: # Python 2 class Super: attr = 0 cla

pythonlambda的用法

python中lambda的用法2016年03月25日 11:25:18 有腹肌的小蝌蚪_ 閱讀數:41985 一、lambda函式也叫匿名函式,即,函式沒有具體的名稱。先來看一個最簡單例子: def f(x):return x**2print f(4) Python中使用lambda的話,寫成這樣

python的元解讀

在多數的程式語言中,類就是一組用來描述如何生成一個物件的程式碼段,但類也是物件。只要使用關鍵詞class。python直譯器在執行時就會建立一個物件。對於一個物件·:可做的操作:賦值給一個變數,拷貝,增加屬性,作為函式引數進行傳遞等。 類也是物件,可以在執行時動態的建立。對於動態的建立類,可以使

pythonlambda講解

lambda是Python程式語言中使用頻率較高的一個關鍵字。那麼,什麼是lambda?它有哪些用法? 這裡,我們通過閱讀各方資料,總結了關於Python中的lambda的“一個語法,三個特性,四個用法,一個爭論”。 一個語法 在Python中,lambda的語法是唯一的。其形式如下

函式在python是第一物件——day11

函式在python中是第一類物件?1、可以被引用x=1y=xdef bar(): print('from bar')f=barf()2、可以當中引數傳入x=1def func(a): print(a)func(x)def bar(): print('from bar')def wrapper

pythonlambda表示式的使用以及兩個BIF即filter()和map()的使用

1.lambda表示式 作用:在用python寫一些執行指令碼時,使用lambda就可以省下定義函式過程,比如我們只是需要寫一個簡單的指令碼來管理伺服器時間,我們就不需要專門定義一個函式然後再寫呼叫,使用lambda就可以使的程式碼更加簡潔 對於一些比較抽象並且整個程式使用下來只需要呼叫

python 的元

1. 類也是物件 在大多數程式語言中,類就是一組用來描述如何生成一個物件的程式碼段。在Python中這一點仍然成立: >>> class ObjectCreator(object): … pass … >>> my_object = Objec

python的定製(形如__xxx__的變數)很有意思

python中除了可以使用內建的型別,如list,tuple,dict,還可以建立自己的物件來實現像這些內建型別的訪問,不過需要在定義類的時候對一些魔法方法逐一實現。 1、__str__ 我們先定義一個Study類,列印一個例項: 打印出一堆<__main__>,不好看

Pythonlambda表示式、reduce函式、map函式、zip函式

對Python這幾個常用的小函式做一個彙總學習,參考了一些資料,有不妥的地方請原諒。 1、lambda函式 lambda是Python的一個內建函式,但是比def簡單很多。lambda不同於其他函式,主體是一個表示式,在程式碼內部嵌入一個函式的定義。工程用的比較多的是程式

python抽象與

前言: python中所有的資料都是以物件的形式存在,無論是簡單的數字型別還是複雜的程式碼模組。然而python特殊的語法形式巧妙的將實現物件機制的大量細節隱藏了,比如輸入num = 7就可以建立一個值為7的整數物件,並且將這個物件賦值給變數num。只是這個物件包含了加法,乘法之類

python dict 在宣告的位置不一樣,結果有所差別

第一種宣告方式: class A(object): names = {} def output(self): print(self.names) class A1(A): pass class A2(A): pass

Pythonlambda表示式學習

lambda只是一個表示式,函式體比def簡單很多。 lambda的主體是一個表示式,而不是一個程式碼塊。僅僅能在lambda表示式中封裝有限的邏輯進去。 lambda表示式是起到一個函式速寫的作用。允許在程式碼內嵌入一個函式的定義。 如下例子: 定義了一

理解python的元

一,理解類也是物件 在python中類同樣也是一種物件,只要使用關鍵字class,Python直譯器在執行的時候就會建立一個物件,這個物件(類)自身擁有建立物件(類例項)的能力,這就是為什麼他是一個類的原因,但是,他的本質任然是一個物件。 class objectCreator(object):