Eu sei que é uma pergunta muito simples, mas não tenho idéia de como pesquisar no Google.
Como eu posso fazer
print '<a href="%s">%s</a>' % (my_url)
Então isso my_url
é usado duas vezes? Eu suponho que tenho que "nomear" o %s
e usar um dict nos parâmetros, mas não tenho certeza da sintaxe adequada?
apenas para sua informação, sei que posso usar my_url
duas vezes nos parâmetros, mas esse não é o ponto :)
Respostas:
No Python 2.6+ e Python 3, você pode optar por usar o método de formatação de string mais recente.
o que evita que você repita o argumento, ou
se você quiser parâmetros nomeados.
que é estritamente posicional e vem apenas com a ressalva de que os argumentos format () seguem as regras do Python em que args não nomeados devem vir primeiro, seguidos por argumentos nomeados, seguidos por * args (uma sequência como lista ou tupla) e depois * kwargs (um dict digitado com strings se você souber o que é bom para você). Os pontos de interpolação são determinados primeiro substituindo os valores nomeados em seus rótulos e depois posicionais do que resta. Então, você também pode fazer isso ...
Mas não isso ...
fonte
"literal {arg1}".format(arg1="arg!")
formato nomeado funciona com o Python 3.5, enquanto o terserf"literal {arg1}"
é uma inovação mais recente no Python 3.6 ou AFAIK.fonte
'<a href="%(url)s">%(url)s</a>' % dict(url=my_url)
Solução em Python 3.6+
O Python 3.6 introduz formatação literal de string , para que você possa formatar os parâmetros nomeados sem repetir nenhum dos parâmetros nomeados fora da string:
Isso avaliará
my_url
, portanto, se não estiver definido, você receberá umNameError
. De fato, em vez demy_url
, você pode escrever uma expressão Python arbitrária, desde que seja avaliada como uma string (por causa do:s
código de formatação). Se você deseja uma representação de sequência para o resultado de uma expressão que pode não ser uma sequência, substitua:s
por!s
, assim como na formatação regular pré-literal.Para detalhes sobre a formatação literal de cadeias, consulte PEP 498 , onde foi introduzido pela primeira vez.
fonte
Você será viciado em sintaxe.
Também em C # 6.0, os desenvolvedores do EcmaScript também familiarizam essa sintaxe.
fonte
Para criar páginas HTML, você deseja usar um mecanismo de modelagem, não uma simples interpolação de cadeias.
fonte
render()
método? Nada diz que você precisa alimentar a saída do modeloHttpResponse()
. O Django é embaraçosamente versátil.Assim como a maneira do dicionário, pode ser útil conhecer o seguinte formato:
print '<a href="%s">%s</a>' % (my_url, my_url)
Aqui é um pouco redundante, e a maneira do dicionário certamente é menos propensa a erros ao modificar o código, mas ainda é possível usar tuplas para várias inserções. O primeiro
%s
substitui o primeiro elemento da tupla, o segundo%s
substitui o segundo elemento da tupla e assim por diante para cada elemento da tupla.fonte
my_url
na verdade , é uma chamada de função que não quero que seja avaliada duas vezes. Duas vezes não é tão ruim, mas poderia facilmente ter sido 20 vezes :)(get_my_url(), )*20
apenas chama a função uma vez e a duplica 20 vezes.