2015-04-22 54 views
0

可以將條件本身存儲在變量中,而不是立即返回它,何時聲明它?可以保存爲一個可變的條件嗎?

例子:

a = 3 
b = 5 

x = (a == b) 
print(x) 

a = 5 
print(x) 

回報是

False 
False 

不過,我有望獲得

False 
True 

我只是隨便與Python的魔法樂趣。我知道這是可能的使用函數,但我想知道是否有可能使用一個變量。

+0

您可以使用lambda函數:'X =拉姆達A,B:A == B',然後'X(3,5)' –

+0

你沒有得到你所期望的結果的原因是因爲條件存儲在變量「x」中的數據不會使用存儲在「a」中的新值進行更新。 –

回答

1

後,必須添加print(x)該條件始終立即進行評估。如果你要評估它的需求,你可以把一個函數或lambda表達式:

x = lambda: a == b 
print(x()) 

另外,你也可能做一些黑魔法並作出評估條件的類時,它的印刷:

class Condition: 
    def __init__ (self, cond): 
    self.cond = cond 
    def __str__ (self): 
    return str(self.cond()) 

x = Condition(lambda: a == b) 
print(x) 

這只是用於教育目的,但不要在生產中使用它。還要注意它在打印語句中工作 - 要使它在if語句等中工作,您還必須覆蓋__bool__(python 3)或__nonzero__(python 2)。

1

當然,這就是所謂的功能! :)

def x(a, b): 
    return a == b 
+0

哦,是的,我知道,但我想知道是否可以在一個變量。 – Macabeus

+0

不是真的,你可以創建一個依賴於全局狀態的函數,而是寫'print(x)'你可以寫'print(x())',但它很醜,並且不是一個純函數 – kosii

1

不需要你需要一個函數。

def test(param_1, param_2): 
    return param_1 == param_2 

a = 3 
b = 5 
print(test(a, b)) 
a = 3 
print(test(a, b)) 
0

使它成爲一個簡單的函數:

def f(a,b): 
    x= (a==b) 
    print x 
f(3,5) 
f(5,5) 


此外,如果你問,如果你可以存儲在變量的情況下,你已經做了。這就是爲什麼X根據函數的輸出保持真值或假值的原因。如果您只想使用變量而不是函數,那麼在每次更新變量

2

您可以通過使用property得到這種反應模式:

class Test: 
    def __init__(self, a, b): 
     self.a = a 
     self.b = b 

    @property 
    def x(self): 
     return self.a == self.b 

然後:

>>> t = Test(a=3, b=5) 
>>> t.x 
False 
>>> t.a = 5 
>>> t.x 
True 
1

如果你只是想在魔術當您打印X發生,覆蓋__str__

>>> class X(object): 
...  def __str__(self): 
...   return str(a == b) 
... 
>>> x = X() 
>>> print(x) 
False 
>>> a = 5 
>>> print(x) 
True 
相關問題