Python傳播者會說Python沒有switch語句的原因是因爲它有字典。那麼......我怎麼用字典來解決這個問題呢? 問題是,所有值正在評估一些並引發異常取決於輸入。Python懶惰字典評估
這只是一個存儲一個數字或一列數字並提供乘法的類的簡單例子。 「拉姆達:」我能解決這個問題。將前綴每個值
class MyClass(object):
def __init__(self, value):
self._value = value
def __mul__(self, other):
return {
(False, False): self._value * other._value ,
(False, True): [self._value * o for o in other._value] ,
(True , False): [v * other._value for v in self._value] ,
(True , True): [v * o for v, o in zip(self._value, other._value)],
}[(isinstance(self._value, (tuple, list)), isinstance(other._value, (tuple, list)))]
def __str__(self):
return repr(self._value)
__repr__ = __str__
>>> x = MyClass(2.0)
>>> y = MyClass([3.0, 4.0, 5.0])
>>> print x
2.0
>>> print y
[3.0, 4.0, 5.0]
>>> print x * y
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 8, in __mul__
TypeError: can't multiply sequence by non-int of type 'float'
一種方法字典查找後和調用lambda函數......「}(isinsta ...)」
有沒有更好的方法?
採用*任何類型的值*的方法都是關於從OOP的角度來看最糟糕的事情,這就是爲什麼代碼看起來非常難看。 – 2010-08-12 21:05:02