Евангелисты Python скажут, что причина, по которой у Python нет оператора switch, заключается в том, что у него есть словари.Итак ... как я могу использовать словарь, чтобы решить эту проблему здесь?Проблема состоит в том, что все значения оцениваются по некоторым значениям и вызывают исключения в зависимости от ввода.
Это просто тупой пример класса, который хранит число или список чисел и обеспечивает умножение.
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:", а после поиска в словаре вызвать функцию lambda .... "} (isinsta ...)"
Есть ли лучший способ?