Что означает «или» в инструкции return python / Объяснение суммы подмножества списка

Я делал сложную задачу Python Array Addition I, но я не мог понять это правильно. Я видел правильный код другого пользователя, и я немного озадачен этим. В основном, что делает «или» в заявлении о возврате? Это мешает мне полностью понять решение этой проблемы. Благодарю.

Возникает вопрос: пусть функция ArrayAdditionI (arr) принимает массив чисел, хранящихся в arr, и возвращает строку true, если любая комбинация чисел в массиве может быть добавлена ​​до максимального числа в массиве, в противном случае верните string false. Например: если arr содержит [4, 6, 23, 10, 1, 3], вывод должен возвращать true, потому что 4 + 6 + 10 + 3 = 23. Массив не будет пустым, не будет содержать все те же элементы, и могут содержать отрицательные числа.

def subsetsum(target, arr): if len(arr) == 0: return target == 0 return subsetsum(target, arr[1:]) or subsetsum(target - arr[0], arr[1:]) def ArrayAdditionI(arr): arr = sorted(arr) target = arr[-1] arr = arr[:-1] return 'true' if subsetsum(target, arr) else 'false' # keep this function call here # to see how to enter arguments in Python scroll down print ArrayAdditionI(raw_input()) 

2 Solutions collect form web for “Что означает «или» в инструкции return python / Объяснение суммы подмножества списка”

Вот как это сломать:

 return subsetsum(target, arr[1:]) or subsetsum(target - arr[0], arr[1:]) 

Это имеет форму return a or b где a = subsetsum(target, arr[1:]) и b = subsetsum(target - arr[0], arr[1:]) .

Если bool (a) имеет значение True , то выражение a or b замыкает и возвращает любое значение a . Если bool(a) является False , тогда b необходимо оценить, чтобы определить значение выражения a or b .

Таким образом, return a or b является сокращением для следующего, с тем преимуществом, что b не оценивается (если это функция), если bool (a) является True, благодаря логике короткого замыкания.

 if bool(a): return a else: return b 

Это не делает ничего особенного в контексте «возвращения», так что это путает. Уберите возвращение и просто посмотрите на булево выражение

 False or True 

Будет оцениваться значение True, потому что одно из выражений оценивает значение True. Пример с возвратом – это просто результат вычисления булевского выражения и его возврата. Так что True, если какой-либо из подмножеств () вызывает return True, в противном случае False.

 >>> False or True True >>> False or False False 
Python - лучший язык программирования в мире.