print
pode descompactar bem uma tupla removendo colchetes e vírgulas, por exemplo
a = (0, -1, 1)
print(*a)
produz 0 -1 1
. Tentar o mesmo com f-strings falha:
print(f'{*a}')
A opção de f-string mais próxima que encontrei é:
print(f'{*a,}'.replace(',', '').replace('(', '').replace(')', ''))
Existe uma maneira mais direta de obter resultados 0 -1 1
usando *a
f-strings?
Não, as f-strings não servem para nada aqui.
A maneira mais direta que consegui encontrar é o método join para strings.
Se os elementos da sua tupla não forem strings, eles terão que ser convertidos (se possível).
O problema é que o asterisco (*) não é uma maneira de remover dois pontos e chaves na função de impressão.
O asterisco é uma maneira de tratar uma lista ou tupla não como uma lista ou tupla. Mas cada elemento disso como um parâmetro posicionado único para a função que você chama.
Isso significa que
print(*a)
é o mesmo queprint(a[0], a[1], a[2])
. E print tem o recurso de separar cada argumento fornecido com um único espaço em branco.Então não, não há funcionalidade de desempacotamento de parâmetros para f-strings. Então você tem que seguir os caminhos normais de concatenar iteráveis:
reduce iterará sobre os elementos e dará na primeira iteração o elemento 0 e 1 para o lambda, na segunda iteração o resultado da primeira iteração e o elemento 2 para o lambda e assim por diante. Dessa forma, muitas strings são criadas, mas você pode usar f-strings. Se quiser usá-las.
ou um atalho para isso é (roubado do comentário de trincot)
" ".join(map(str, a))
aqui usamos o método join embutido de string. Isso concatena um iterável de strings, então temos que primeiro converter a em um iterável de strings, é isso que map faz, sem alterar os valores de a.Uma terceira maneira seria usar print com um io.StringIo como destino, mas isso não usará f-strings, mas aqui está um link para um exemplo: python3 print to string