Что означает% s в строке формата python?

Что означает %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])

Ответ 1

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

Пожалуйста, смотрите "Форматирование строк":

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 заменяется тем, что я передаю строке после символа %. Также обратите внимание, что здесь я также использую кортеж (когда у вас есть только одна строка, использование кортежа необязательно), чтобы проиллюстрировать, что несколько строк могут быть вставлены и отформатированы в одном выражении.

Ответ 2

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

И только для того, чтобы помочь вам немного больше, вот как вы используете несколько форматирования в одной строке

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

Если вы используете int вместо строки, используйте% d вместо% s.

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

Ответ 3

Метод 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'

Ответ 4

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

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

Ответ 5

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

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

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

Usage: myscript.py database-name

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

ERROR: Database database-name was not found!

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

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

Ответ 6

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

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

%s: строка

%d: десятичные дроби

%f: float

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

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\ age is %d with incredible IQ of %f ' %(name, extendedName, age, IQ)) #Gandalf the Grey age is 84 with incredible IQ of 149.900000 

#Same output can be printed in following ways:


print ('{0} {1}\ age is {2} with incredible IQ of {3} '.format(name, extendedName, age, IQ))          # with help of older method
print ('{} {}\ 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!"

Ответ 7

% s известен как спецификатор формата, в частности для строк. Поскольку обсуждение типов данных продолжается в этой книге, вы смотрите на несколько больше, каждый из которых соответствует данному типу данных. Каждый спецификатор действует как заполнитель для этого типа в строке; и после строки символ% наружу строки указывает, что после него все значения, которые нужно вставить в спецификатор формата, будут представленный там для использования в строке. Вы можете заметить круглые скобки. Это говорит строке, что она должна ожидать увидеть последовательность, которая содержит значения, которые будут использоваться строкой для заполнения спецификаторов формата. Более простой способ подумать об этом состоит в том, чтобы представить, что% s - это ящик для хранения, который содержит значение в круглые скобки. Если вы хотите сделать больше одного значения, вы просто добавите другой спецификатор формата, таким образом:
" → > " John% s% s "% (" Every "," Man ")
John Everyman '

Ответ 8

Вот хороший пример в 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