Подходящие для Python способ проверить, если все значения в kwargs являются строку "false"
Возьмите kwargs то есть: send_members, send_companies, send_reviewers, каждая из которых содержит строку 'true' или 'false'.
Если все значения в каждом kwargs равны 'false', я хочу вывести сообщение об ошибке, например:
if (kwargs['send_members'] == 'false' and kwargs['send_companies'] == 'false' and
kwargs['send_reviewers'] == 'false'):
raise SomeError('at least one keyword needs to be true')
Существует ли Пифонический способ проверить, все ли значения в kwargs одинаковы, 'false'? Хотя приведенный выше пример работает, он становится очень грязным, когда у меня есть 10 kwargs.3 ответа:
kwargs = {'send_members':'false', 'send_companies':'false', 'send_reviewers':'false'} def v1 (): if set(kwargs.values()) == {'false'}: return 'all false!' def v2 (): if not [x for x in kwargs.values() if x !='false']: return 'all false!' def v3 (): if all(v == 'false' for v in kwargs.values()): return 'all false!' In [10]: %timeit -n100 v1() 100 loops, best of 3: 1.05 µs per loop In [11]: %timeit -n100 v2() 100 loops, best of 3: 961 ns per loop In [12]: %timeit -n100 v3() 100 loops, best of 3: 10.3 µs per loopИнтересно, что использование all () кажется примерно в 10 раз медленнее.
Вы можете [также] использовать встроенный
any()функция, которая может быть немного быстрее, чемall(), потому что она прекратит проверку, как только обнаружится сбой.class SomeError(Exception): pass testcases = [ {'send_members': 'true', 'send_companies': 'false', 'send_reviewers': 'false'}, {'send_members': 'false', 'send_companies': 'true', 'send_reviewers': 'false'}, {'send_members': 'false', 'send_companies': 'false', 'send_reviewers': 'false'}, ] for kwargs in testcases: print(kwargs, end=' ') try: if any(value != 'false' for value in kwargs.values()): raise SomeError('at least one keyword needs to be true') except SomeError: print("At least one kwarg is not 'false'") else: print("OK, all kwargs are 'false'")