Para um uso simples e casual como no exemplo não há muita diferença e critério. Talvez nele só caberia o critério de "padronização" do código para ficar mais "bonito" ou melhor dizendo, "legível" para outros programadores.
Em critério técnicos, talvez só teria ganho de performance, como processamento mais rápido e menor consumo de memória.
Relativo à aparência do código, podemos ver um pequeno comparativo:
print(f"string1 {variavel1} string2 {variavel2} string3 {variavel3}")
print("string1", variavel1, "string2", variavel2, "string3", variavel3)
print("string1 %s string2 %s string3 %s", % (variavel1, variavel2, variavel3))
print("string1 {} string2 {} string3 {}".format(variavel1, variavel2, variavel3))
print("string1 {variavel1} string2 {variavel2} string3 {variavel3}".format(variavel1 = valor1, variavel2 = valor2, variavel3 = valor3))
No primeiro exemplo temos 61 caracteres dentro do print()
No segundo exemplo temos 64 caracteres dentro do print()
No terceiro exemplo temos 70 caracteres dentro do print()
No quarto exemplo temos 74 caracteres dentro do print()
No quinto exemplo você tem uma amostra de como poderia ser chamado de tudo qualquer coisa menos de "gente" por outro programador.
Utilizando f-string, você teria uma única string direta sem quebras, mais curta, mais "bonita", fora que ganha a facilidade de formatações para outros tipos de saídas de string utilizando o print.