python樹函式 從表示式樹建立python函式

2021-10-19 03:19:47 字數 2354 閱讀 4771

我假設你的表示式樹是由許多物件組成的,它們的型別對應於它是什麼樣的表示式。例如,or,equals,strings等,類似於:class orexpression:

def __init__(self, left, right):

self.left = left

self.right = right

class equal***pression:

def __init__(self, left, right):

self.left = left

self.right = right

class literal:

def __init__(self, value):

self.value = value

class variable:

def __init__(self, name):

self.name = name

與示例等效的表示式如下所示:

^$您可以為每個為給定上下文計算自身的類建立乙個方法eval。是這樣的:class orexpression:

def __init__(self, left, right):

self.left = left

self.right = right

def eval(self, variables):

return self.left.eval(variables) or self.right.eval(variables)

class equal***pression:

def __init__(self, left, right):

self.left = left

self.right = right

def eval(self, variables):

return self.left.eval(variables) == self.right.eval(variables)

class literal:

def __init__(self, value):

self.value = value

def eval(self, variables):

return self.value

class variable:

def __init__(self, name):

self.name = name

def eval(self, variables):

return variables[self.name]

print e.eval()

print e.eval()

結果:true

true

false

但是,如果你不按型別區分不同的表示式呢?假設您的樹由普通的舊節點組成,這些節點標識它們使用的value屬性是什麼型別的表示式。**大致相同,只是使用乙個單片開關,而不是單獨的eval方法。在class node:

def __init__(self, value=none, *children):

self.value = value

self.children = children

def evaltree(t, variables):

if t.value == "or":

return evaltree(t.children[0], variables) or evaltree(t.children[1], variables)

elif t.value == "equals":

return evaltree(t.children[0], variables) == evaltree(t.children[1], variables)

elif t.value == "literal":

return t.children[0].value

elif t.value == "variable":

name = t.children[0].value

else:

raise exception("unrecognized node type")

t = node("or",

node("equals",

node("variable", node("element")),

node("or",

node("equals",

node("variable", node("element")),

node("equals",

node("variable", node("element")),

print evaltree(t,)

print evaltree(t,)

結果:true

true

false

從字尾表示式建立表示式樹

在乙個公司呆久了,不出去看看,你永遠不知道你的水平如何,你值多少錢。也就是說,作為乙個技術人員,應該每隔4 5個月,出去參加幾次面試,看看自己的技術水平有沒有和it圈脫節。但更多的是在尋找更好的機會,找乙份更適合自己,待遇更高的工作。好了,從今天起,每天都總結乙個小的資料結構與演算法知識,一來擴充自...

表示式 表示式樹 表示式求值

總時間限制 1000ms 記憶體限制 65535kb 描述 眾所周知,任何乙個表示式,都可以用一棵表示式樹來表示。例如,表示式a b c,可以表示為如下的表示式樹 a b c 現在,給你乙個中綴表示式,這個中綴表示式用變數來表示 不含數字 請你將這個中綴表示式用表示式二叉樹的形式輸出出來。輸入輸入分...

Lambda表示式表示式樹

在c 3.0中,繼匿名方法之後出現了lambda 表示式,使表達更為簡潔 快捷。lambda 表示式使用lambda 運算子 來定義,語法如下 引數列表 lambda 運算子的左邊是輸入引數,定義lambda表示式的接收引數列表,右邊包含表示式或語句塊,表示將表示式的值或語句塊返回的值傳給左邊的引數...