В данном примере, несмотря на то, что в блоке
try есть инструкция return 1, блок finally будет выполнен в любом случае после выполнения блока try
Поскольку в блоке finally также есть инструкция return 2, это значение будет возвращено функцией func, переопределяя предыдущее значение 1