tutorial O que significa% s em uma string de formato python?




python wiki (6)

O que significa %s em Python? E o que faz o seguinte código?

Por exemplo...

 if len(sys.argv) < 2:
     sys.exit('Usage: %s database-name' % sys.argv[0])

 if not os.path.exists(sys.argv[1]):
     sys.exit('ERROR: Database %s was not found!' % sys.argv[1])

%s e %d são especificadores de formato ou espaços reservados para formatação de cadeias / decimais / floats etc.

Especificador de formato usado mais comumente:

%s : string

%d : decimais

%f : float

Código auto-explicativo:

name = "Gandalf"
extendedName = "the Grey"
age = 84
IQ = 149.9
print('type(name):', type(name)) #type(name): <class 'str'>
print('type(age):', type(age))   #type(age): <class 'int'>   
print('type(IQ):', type(IQ))     #type(IQ): <class 'float'>   

print('%s %s\'s age is %d with incredible IQ of %f ' %(name, extendedName, age, IQ)) #Gandalf the Grey's age is 84 with incredible IQ of 149.900000 

#Same output can be printed in following ways:


print ('{0} {1}\'s age is {2} with incredible IQ of {3} '.format(name, extendedName, age, IQ))          # with help of older method
print ('{} {}\'s age is {} with incredible IQ of {} '.format(name, extendedName, age, IQ))          # with help of older method

print("Multiplication of %d and %f is %f" %(age, IQ, age*IQ)) #Multiplication of 84 and 149.900000 is 12591.600000          

#storing formattings in string

sub1 = "python string!"
sub2 = "an arg"

a = "i am a %s" % sub1
b = "i am a {0}".format(sub1)

c = "with %(kwarg)s!" % {'kwarg':sub2}
d = "with {kwarg}!".format(kwarg=sub2)

print(a)    # "i am a python string!"
print(b)   # "i am a python string!"
print(c)    # "with an arg!"
print(d)   # "with an arg!"

É uma sintaxe de formatação de string (que é emprestada de C).

Por favor, veja "PyFormat" :

Python suporta valores de formatação em strings. Embora isso possa incluir expressões muito complicadas, o uso mais básico é inserir valores em uma string com o marcador de posição %s .

Edit: Aqui está um exemplo muito simples:

#Python2
name = raw_input("who are you?")
print "hello %s" % (name,)

#Python3+
name = raw_input("who are you?")
print("hello %s" % (name,))

O token %s me permite inserir (e possivelmente formatar) uma string. Observe que o token %s é substituído por qualquer coisa que eu passe para a string após o símbolo % . Observe também que estou usando uma tupla aqui também (quando você só tem uma string usando uma tupla é opcional) para ilustrar que várias strings podem ser inseridas e formatadas em uma instrução.


%s indica um tipo de conversão de string ao usar os recursos de formatação de string do python. Mais especificamente, %s converte um valor especificado em uma string usando a função str() . Compare isso com o tipo de conversão %r que usa a função repr() para conversão de valor.

Dê uma olhada nos documentos para formatação de string .


O método de format foi introduzido no Python 2.6. É mais capaz e não é muito mais difícil de usar:

>>> "Hello {}, my name is {}".format('john', 'mike')
'Hello john, my name is mike'.

>>> "{1}, {0}".format('world', 'Hello')
'Hello, world'

>>> "{greeting}, {}".format('world', greeting='Hello')
'Hello, world'

>>> '%s' % name
"{'s1': 'hello', 's2': 'sibal'}"
>>> '%s' %name['s1']
'hello'

Em resposta à sua segunda pergunta: o que esse código faz?

Esse é um código de verificação de erros bastante padrão para um script Python que aceita argumentos de linha de comando.

Então a primeira declaração if traduz em: se você não me passou um argumento, eu vou lhe dizer como você deve me passar um argumento no futuro, por exemplo, você verá isso na tela:

Usage: myscript.py database-name

A próxima instrução if verifica se o 'nome do banco de dados' que você passou para o script realmente existe no sistema de arquivos. Se não, você receberá uma mensagem como esta:

ERROR: Database database-name was not found!

Da documentation :

argv [0] é o nome do script (depende do sistema operacional se esse é um nome de caminho completo ou não). Se o comando foi executado usando a opção de linha de comando -c para o interpretador, argv [0] é configurado para a string '-c'. Se nenhum nome de script foi passado para o interpretador Python, argv [0] é a string vazia.


A resposta de Andrew é boa.

E só para te ajudar um pouco mais, aqui está como você usa a formatação múltipla em uma string

"Hello %s, my name is %s" % ('john', 'mike') # Hello john, my name is mike".

Se você estiver usando ints em vez de string, use% d em vez de% s.

"My name is %s and i'm %d" % ('john', 12) #My name is john and i'm 12




python