Технически, я бы сказал, что второй будет работать лучше, потому что оператор if выполняется только один раз, а не каждый раз, когда функция запускается.
Разница, однако, будет незначительной до такой степени, что она будет бессмысленной. Снижение производительности одного оператора if, такого как это, было бы незначительным даже по сравнению с потерей производительности простого вызова функции. Это имело бы небольшую разницу, даже если бы оно вызывалось миллион раз.
Первый легче понять, потому что у него нет неловкости в том, чтобы определять одну и ту же функцию дважды на основе условия, причем обе версии ведут себя по-разному. Это, кажется, рецепт путаницы позже.
Я бы не первый, кто скажет, что если вы действительно не сошли с ума по поводу этой оптимизации, вы получите большую выгоду от читабельности кода.