Provavelmente estou perdendo alguma coisa aqui, depois de pesquisar não consegui encontrar uma resposta.
Eu explorei alguns projetos Python e uma coisa que eu continuo percebendo é o fato de que a maioria deles continua a usar o %
operador para formatar seqüências de caracteres, em vez do .format()
método mais novo e recomendado . Existe uma razão para isso? parece uma mudança trivial, a menos que eu esteja perdendo algo completamente.
Por exemplo:
# count how many times the % operator technique is used
find . -name "*.py" -exec grep -HE "\"[^\"]+\"\s\%\s\w+|'[^']+'\s\%\s\w+" {} \; | wc -l
# and the same for format()
find . -name "*.py" -exec grep -HE "\w+\.format\(" {} \; | wc -l
# Results:
#
# % operator format()
# iPython 670 63
# Django 977 8
# Tornado 91 0
# requests 25 1
Não há razão real para esta pergunta, apenas curioso.
Saúde Gente!
.format()
método?%
é mais eficiente e menos detalhado para substituições simples de strings. Eu o uso na maioria das vezes, e quando preciso de uma formatação mais poderosa.format
Respostas:
Três inclinações extremamente fortes se unem para produzir esse efeito:
Todos os três são, de fato, bastante sensatos (o primeiro menos, pois o aprendizado contínuo é o que os profissionais da informação devem prosperar).
( Edit: Como apontado abaixo, existe um quarto ponto: não saber que o novo método existe! Isso é menos sensato, mas pode realmente ser o mais comum.)
fonte
.format()
método ou aformat()
função, as pessoas simplesmente não sabem que elas existem .format
é equivalente a . Por exemplo, usando você pode usar para especificar a largura mínima do campo (por exemplo, formata o flutuador com pelo menos dígitos), enquanto você não pode fazer isso. E provavelmente existem outras coisas que podem fazer enquanto não podem.%
%
*
'%.*f' % (7, 2.34)
2.34
7
format
format
%
format
, mas não é tão conciso -"{0:.{1}f}".format(2.34, 7)
. Eu não encontrei nada%
pode fazer issoformat
não pode.Além dos outros motivos, eu acrescentaria compatibilidade e consistência com versões anteriores. Geralmente, você precisa escrever scripts que possam ser executados nos computadores de outras pessoas, que não desejam ou não podem atualizar para o Python mais recente e melhor. Então você escreve para o menor denominador comum. No momento em que um número suficiente de usuários atualizou para uma versão suficientemente recente do Python, você provavelmente já esqueceu quais recursos apareceram em qual versão do Python. A menos que sejam recursos excepcionalmente valiosos, pode não valer a pena pesquisar, considerar e decidir se agora é seguro usar cada recurso. O método method format é uma API agradável para usar em novo código, mas o argumento para introduzi-lo em uma base de código que já usa% extensivamente não é tão forte.
fonte
Ao desenvolver software para seu próprio uso, geralmente é de seu benefício usar versões mais recentes de suas bibliotecas e ferramentas de desenvolvimento. No entanto, os projetos que você está vendo são bibliotecas e ferramentas de desenvolvimento que devem ser compartilhadas com a comunidade. Nesses casos, você deseja ser conservador nos recursos necessários para obter a base instalada mais ampla e obter o máximo de pessoas envolvidas no projeto.
O
format()
método não foi adicionado até o lançamento do Python 3.0 / 2.6 em 2008. Isso parece há muito tempo, mas lembre-se de que as pessoas raramente usam o primeiro lançamento do software. Vamos colocar isso no contexto de quando ele ficou disponível em duas das distribuições Linux mais "sérias". O RHEL 5.x ainda usa o Python 2.4 e é suportado até 2017 - o 6.x tem o Python 2.6, mas não foi lançado até 2010. No campo Debian, eles não tinham o Python 2.6 até a série 6.x, que se tornou estável em 2011.Portanto, embora possa fazer sentido, se você estivesse iniciando um projeto como o Django (lançado originalmente em 2005) hoje, para padronizar o novo método, há muito pouco valor em voltar e alterar todas as 1000 ocorrências do método antigo sem que ele tenha foi formalmente reprovado. Faz trabalho, cria a possibilidade de introduzir bugs e aumenta desnecessariamente os requisitos do sistema.
fonte
Adição à resposta de @ KilianFoth; portar um grande projeto para uma versão superior do software tem muito trabalho a fazer. E alterar um uso não reprovado tem a menor importância no processo de atualização.
Provavelmente eles estão usando um novo formato em partes totalmente reescritas e não alteram o uso existente nos demais.
fonte