Ваше предположение верно, и относительно того, почему return ret,ret
, ответ таков: оператор return предназначен для возврата пары равных значений, а не одного.
Это скорее стиль кодирования, нежели алгоритм, потому что это может быть сделано другими синтаксисами. Однако в некоторых случаях этот вариант является предпочтительным, например, если мы напишем
def func(x, y, z):
...
return ret
a = func(x, y, z)
b = func(x, y, z)
, тогда func
будет выполнено дважды. Но если:
def func(x, y, z):
...
return ret, ret
a, b = func(x, y, z)
затем func
можно выполнить только один раз, при этом можно вернуться как к a
, так и к b
.
Также в вашем конкретном случае:
Если h
равен false
, то программа пока не будет выполнена до строки return doc,shingles.keys()
, а затем переменные doc
и sh
в construct_set_shingles
соответственно принимают значения doc
и shingles.keys()
.
В противном случае первый оператор возврата пропускается, второй выполняется, а затем оба значения doc
и sh
принимают равные значения, в частности равные значению tuple(shingles_hashed(shingles))