do_twice принимает функцию и два аргумента и применяет ее к 2 результатам самой себя от этих аргументов. В коде это даже проще. func(func(x, y), func(x, y))
Поскольку вызываем мы ее с параметрами do_twice(add, a, b), на выходе получим: add(add(5, 10), add(5, 10)) == add(15, 15) == 30
Ну и в конце мы печатаем этот результат функцией print