Что означает% s в строке формата python? - PullRequest
150 голосов
/ 15 июня 2009

Что означает %s в Python? И что делает следующий бит кода?

Например ...

 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])

Ответы [ 7 ]

176 голосов
/ 15 июня 2009

Это синтаксис форматирования строки (который он заимствует из C).

Пожалуйста, смотрите "PyFormat" :

Python поддерживает форматирование значений в строки. Хотя это может включать в себя очень сложные выражения, наиболее Основное использование состоит в том, чтобы вставить значения в строка с заполнителем %s.

Редактировать: Вот очень простой пример:

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

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

Маркер %s позволяет мне вставить (и, возможно, отформатировать) строку. Обратите внимание, что токен %s заменяется тем, что я передаю строке после символа %. Также обратите внимание, что здесь я также использую кортеж (когда у вас есть только одна строка, использование кортежа необязательно), чтобы проиллюстрировать, что несколько строк можно вставить и отформатировать в одном выражении.

101 голосов
/ 16 июня 2009

Андрей ответит хорошо.

И еще немного, вот как вы можете использовать множественное форматирование в одной строке

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

Если вместо строки используются целые числа, используйте% d вместо% s.

"My name is %s and i'm %d" % ('john', 12) #My name is john and i'm 12
25 голосов
/ 17 июля 2013

Метод format был представлен в Python 2.6. Это более способно и не намного сложнее в использовании:

>>> "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'
13 голосов
/ 15 июня 2009

%s указывает тип преобразования строка при использовании возможностей форматирования строки Python. Более конкретно, %s преобразует указанное значение в строку, используя функцию str(). Сравните это с типом преобразования %r, который использует функцию repr() для преобразования значения.

Посмотрите документы для форматирования строк .

6 голосов
/ 15 июня 2009

В ответ на ваш второй вопрос: что делает этот код? ...

Это довольно стандартный код проверки ошибок для скрипта Python, который принимает аргументы командной строки.

Итак, первое утверждение if означает: если вы не передали мне аргумент, я расскажу вам, как вы должны передать мне аргумент в будущем, например, Вы увидите это на экране:

Usage: myscript.py database-name

Следующий оператор if проверяет, существует ли в файловой системе «имя базы данных», переданное вами сценарию. Если нет, вы получите следующее сообщение:

ERROR: Database database-name was not found!

Из документации :

argv [0] - это имя скрипта (это зависит ли операционная система это полный путь или нет). Если команда была выполнена с использованием -c опция командной строки для интерпретатор, argv [0] устанавливается в строка '-c'. Если имя скрипта не было передан интерпретатору Python, argv [0] - пустая строка.

4 голосов
/ 07 августа 2018

%s и %d являются спецификаторами форматирования или местозаполнителями для форматирования строк / десятичных знаков / чисел с плавающей точкой и т. Д.

MOST часто используемый формат Спецификатор формата:

%s: строка

%d: десятичные числа

%f: плавать

Самоочевидный код:

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!"
1 голос
/ 03 июня 2018

Вот хороший пример в Python3.

  >>> a = input("What is your name?")
  What is your name?Peter

  >>> b = input("Where are you from?")
  Where are you from?DE

  >>> print("So you are %s of %s" % (a, b))
  So you are Peter of DE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...