Exemplo de Ruby:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
A concatenação bem-sucedida de strings Python é aparentemente detalhada para mim.
Exemplo de Ruby:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
A concatenação bem-sucedida de strings Python é aparentemente detalhada para mim.
Respostas:
O Python 3.6 adicionará interpolação literal de strings semelhante à interpolação de strings do Ruby. Começando com essa versão do Python (que está programada para ser lançada até o final de 2016), você poderá incluir expressões em "f-strings", por exemplo
name = "Spongebob Squarepants"
print(f"Who lives in a Pineapple under the sea? {name}.")
Antes da 3.6, o mais próximo que você pode chegar disso é
name = "Spongebob Squarepants"
print("Who lives in a Pineapple under the sea? %(name)s." % locals())
O %
operador pode ser usado para interpolação de cadeias de caracteres em Python. O primeiro operando é a string a ser interpolada, o segundo pode ter tipos diferentes, incluindo um "mapeamento", mapeando os nomes dos campos para os valores a serem interpolados. Aqui eu usei o dicionário de variáveis locais locals()
para mapear o nome do campo name
para seu valor como uma variável local.
O mesmo código usando o .format()
método das versões recentes do Python ficaria assim:
name = "Spongebob Squarepants"
print("Who lives in a Pineapple under the sea? {name!s}.".format(**locals()))
Há também a string.Template
classe:
tmpl = string.Template("Who lives in a Pineapple under the sea? $name.")
print(tmpl.substitute(name="Spongebob Squarepants"))
%s
para uma string e %03d
para um número preenchido com 3 dígitos com zeros à esquerda. Poderia ser escrito print "%s has %03d" % ("Python", 2)
. O exemplo, em seguida, utiliza uma chave de mapeamento entre colchetes, após a %
qual é uma maneira de fornecer aos espaços reservados nomes significativos em vez de confiar na ordem deles na string. Você passa um dicionário que mapeia os nomes das chaves para seus valores. É por isso que Sven está usando a locals()
função que retorna um ditado contendo todas as suas variáveis locais, para que ele seja name
s
como um tipo de conversão - o Python pode converter praticamente qualquer coisa em uma string. Mas é claro que você perderia os recursos especiais de formatação de outros tipos de conversão.
Desde o Python 2.6.X, você pode querer usar:
"my {0} string: {1}".format("cool", "Hello there!")
%
operador para interpolação de cadeias não é preterido no Python 3.x. docs.python.org/dev/py3k/whatsnew/… anuncia o plano de descontinuação a %
partir do 3.1, mas isso nunca aconteceu.
{}
que eu posso ser eliminado.
Eu desenvolvi o pacote interpy , que permite a interpolação de strings em Python .
Basta instalá-lo via pip install interpy
. E então, adicione a linha # coding: interpy
no início dos seus arquivos!
Exemplo:
#!/usr/bin/env python
# coding: interpy
name = "Spongebob Squarepants"
print "Who lives in a Pineapple under the sea? \n#{name}."
A interpolação de string do Python é semelhante à printf () de C
Se você tentar:
name = "SpongeBob Squarepants"
print "Who lives in a Pineapple under the sea? %s" % name
A tag %s
será substituída pela name
variável Você deve dar uma olhada nas tags da função de impressão: http://docs.python.org/library/functions.html
print "First is %s, second is %s" % (var1, var2)
.
A interpolação de cadeias será incluída no Python 3.6, conforme especificado no PEP 498 . Você será capaz de fazer isso:
name = 'Spongebob Squarepants'
print(f'Who lives in a Pineapple under the sea? \n{name}')
Note que eu odeio Bob Esponja, então escrever isso foi um pouco doloroso. :)
Você também pode ter isso
name = "Spongebob Squarepants"
print "Who lives in a Pineapple under the sea? \n{name}.".format(name=name)
#
ser impresso. Eles estão apenas usando a sintaxe Ruby.
#
personagem seria impresso.
import inspect
def s(template, **kwargs):
"Usage: s(string, **locals())"
if not kwargs:
frame = inspect.currentframe()
try:
kwargs = frame.f_back.f_locals
finally:
del frame
if not kwargs:
kwargs = globals()
return template.format(**kwargs)
Uso:
a = 123
s('{a}', locals()) # print '123'
s('{a}') # it is equal to the above statement: print '123'
s('{b}') # raise an KeyError: b variable not found
PS: desempenho pode ser um problema. Isso é útil para scripts locais, não para logs de produção.
Duplicado:
Para Python antigo (testado no 2.4), a solução principal aponta o caminho. Você consegue fazer isso:
import string
def try_interp():
d = 1
f = 1.1
s = "s"
print string.Template("d: $d f: $f s: $s").substitute(**locals())
try_interp()
E você recebe
d: 1 f: 1.1 s: s
Python 3.6 e mais recente têm interpolação literal de strings usando f-strings:
name='world'
print(f"Hello {name}!")
name
é uma variável local que está na string e, no Python, você precisa passar explicitamente o dicionário de variáveis locais para o formatador de string, se quiser usá-las.