Então, eu tenho esse problema. Eu tenho tupla (1,2,3) que eu deveria imprimir com formatação de string. por exemplo.
tup = (1,2,3)
print "this is a tuple %something" % (tup)
e isso deve imprimir a representação da tupla com colchetes, como
Esta é uma tupla (1,2,3)
Mas eu entendo TypeError: not all arguments converted during string formatting
.
Como no mundo eu sou capaz de fazer isso? Meio que perdi aqui, então se vocês pudessem me indicar uma direção certa :)
print(....)
.Observe que a
%
sintaxe é obsoleta. Usestr.format
, que é mais simples e mais legível:fonte
%
é obsoleto, mas agora sempre vocêstr.format
mesmo, cegamente. Não importa, estou interessado no que é o qualificador completo, porque o simples{0}
não é o qualificador completo, mas apenas um indicador de posição. Para umint
, o que eu chamo de qualificador completo seria{0:d}
(ou,{3:d}
por exemplo, se o int a ser impresso ocorrer na 4ª posição dostr.format
método). Tentei imprimir uma tupla usando o{0:s}
qualificador, mas ele não funciona. Então, qual é o qualificador completo para algo como uma tupla?str
pode dizer{!s}
, mas esse é o padrão, portanto, é desnecessário. Se você quiser usarrepr
, você pode fazer{!r}
. Ao contrário de%
, não há necessidade de dizerd
para números inteiros.%
arquivo não é totalmente obsoleto. De fato,pylint
até reclamará se você usar a.format
sintaxe dentro dologging
módulo: stackoverflow.com/a/34634301/534238Muitas respostas dadas acima estavam corretas. A maneira correta de fazer isso é:
No entanto, houve uma disputa sobre se o
'%'
operador String está obsoleto. Como muitos apontaram, definitivamente não é obsoleto, pois o'%'
operador String é mais fácil de combinar uma instrução String com os dados da lista.Exemplo:
No entanto, usando a
.format()
função, você terminará com uma declaração detalhada.Exemplo:
Ainda mais,
'%'
operador de corda também útil para nós para validar o tipo de dados, como%s
,%d
,%i
, enquanto .format () suportam apenas dois sinalizadores de conversão :'!s'
e'!r'
.fonte
.format
:tup = (1,2,3); print('First: {}, Second: {}, Third: {}'.format(*tup))
.Observe que
(tup,)
é uma tupla que contém uma tupla. A tupla externa é o argumento para o operador%. A tupla interna é o seu conteúdo, que é realmente impresso.(tup)
é uma expressão entre colchetes que, quando avaliada, resulta emtup
.(tup,)
com a vírgula à direita é uma tupla, que contémtup
como único membro.fonte
Isso não usa formatação de string, mas você deve ser capaz de:
Se você realmente deseja usar a formatação de string:
Observe que isso pressupõe que você esteja usando uma versão Python anterior à 3.0.
fonte
fonte
Mesmo que essa pergunta seja bastante antiga e tenha muitas respostas diferentes, eu ainda gostaria de adicionar a resposta imho mais "pitônica" e também legível / concisa.
Como o
tuple
método de impressão geral já é mostrado corretamente pelo Antimony, isso é um complemento para imprimir cada elemento em uma tupla separadamente, como Fong Kah Chun mostrou corretamente com a%s
sintaxe.Curiosamente, isso foi mencionado apenas em um comentário, mas o uso de um operador de asterisco para descompactar a tupla gera flexibilidade e legibilidade total usando o
str.format
método ao imprimir elementos de tupla separadamente .Isso também evita a impressão de uma vírgula à direita ao imprimir uma tupla de elemento único, conforme contornado por Jacob CUI
replace
. (Mesmo que imho, a representação de vírgula à direita esteja correta se desejar preservar a representação de tipo ao imprimir ):fonte
Eu acho que a melhor maneira de fazer isso é:
Se você está familiarizado com a formatação no estilo printf , o Python suporta sua própria versão. No Python, isso é feito usando o operador "%" aplicado às strings (uma sobrecarga do operador do módulo), que pega qualquer string e aplica a formatação no estilo printf.
No nosso caso, dizemos para imprimir "Esta é uma tupla:" e, em seguida, adicionamos uma string "% s" e, para a string real, estamos passando uma representação de string da tupla (chamando str ( t)).
Se você não está familiarizado com a formatação no estilo printf, sugiro o aprendizado, pois é muito padrão. A maioria dos idiomas suporta de uma maneira ou de outra.
fonte
Observe que uma vírgula à direita será adicionada se a tupla tiver apenas um item. por exemplo:
e você terá:
em alguns casos, por exemplo, você deseja que uma lista entre aspas seja usada na string de consulta do mysql como
é necessário considerar remover a vírgula de rejeição, use replace (',)', ')') após a formatação, pois é possível que a tupla tenha apenas 1 item como ('Tom'), para que a vírgula de rejeição precise ser removida:
Por favor, sugira se você tem uma maneira decente de remover esta vírgula na saída.
fonte
format()
em consultas de banco de dados. Existem métodos aplicáveis para isso em todas as bibliotecas.format()
valores coletados dos usuários pode resultar em injeção de SQL. É mais seguro validar valores de entrada antes de colocá-los na consulta. Consulte estas diretrizes para obter mais informações: dev.mysql.com/doc/connector-python/en/… Você também pode converter valores de parâmetros em uma representação de string do tipo banco de dados e colá-lo na string de consulta. Dê uma olhada em initd.org/psycopg/docs/usage.html, onde você tem um contraexemplo com%
operador e uma solução comexecute()
método em que parâmetros de consulta estão sendo passados nos métodos args.Além dos métodos propostos nas outras respostas, desde o Python 3.6 você também pode usar a Literal String Interpolation (f-strings):
fonte
Tente isto para obter uma resposta:
Se colocarmos apenas uma tupla dentro de (), ela produzirá uma tupla:
Isso significa que a declaração de impressão acima será parecida com: print ("Value:% s"% ('1', '2')), o que é um erro!
Conseqüentemente:
Acima será alimentado corretamente aos argumentos da impressão.
fonte
Para python 3
fonte
Você pode tentar este também;
Você não pode usar
%something
com(tup)
apenas por causa de embalagem e descompactar conceito com tupla.fonte
O papo é barato, mostre o código:
fonte