Was bedeutet% s in einer Zeichenfolge im Python-Format?

Was bedeutet %s in Python? Und was bewirkt der folgende Code?

Zum Beispiel…

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

Es ist eine String-Formatierungssyntax (die von C übernommen wird).

Siehe “Formatieren von Strings” :

Python unterstützt die Formatierung von Werten in Strings. Obwohl dies sehr komplizierte Ausdrücke enthalten kann, besteht die einfachste Verwendung darin, Werte in eine Zeichenfolge mit dem Platzhalter %s einzufügen.

Edit: Hier ist ein wirklich einfaches Beispiel:

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

Das %s Token ermöglicht es mir, eine Zeichenfolge einzufügen (und möglicherweise zu formatieren). Beachten Sie, dass das Token %s durch das ersetzt wird, was auch immer nach dem Symbol % an die Zeichenfolge übergeben wird. Beachten Sie auch, dass ich auch hier ein Tupel verwende (wenn Sie nur eine Zeichenkette haben, die ein Tupel verwendet, ist optional), um zu veranschaulichen, dass mehrere Zeichenketten in einer statement eingefügt und formatiert werden können.

Andrews Antwort ist gut.

Und um Ihnen ein wenig mehr zu helfen, verwenden Sie hier mehrere Formatierungen in einer Zeichenfolge

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

Wenn Sie anstelle von string Ints verwenden, verwenden Sie% d anstelle von% s.

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

Die format wurde in Python 2.6 eingeführt. Es ist leistungsfähiger und nicht viel schwieriger zu benutzen:

 >>> "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' 

%s gibt einen Konvertierungstyp für die Zeichenfolge an, wenn die Zeichensatzformatierungsfunktionen von Python verwendet werden. Genauer gesagt, konvertiert %s einen angegebenen Wert mithilfe der function str() in eine Zeichenfolge. Vergleichen Sie dies mit dem %r Konvertierungstyp, der die function repr() für die Wertkonvertierung verwendet.

Sehen Sie sich die Dokumentation zur Formatierung von Zeichenfolgen an .

In Beantwortung Ihrer zweiten Frage: Was macht dieser Code? …

Dies ist ein Standard-Fehlerprüfcode für ein Python-Skript, das Befehlszeilenargumente akzeptiert.

Die erste if statement bedeutet also: Wenn Sie mir kein Argument übergeben haben, werde ich Ihnen sagen, wie Sie mir in Zukunft einen Streit liefern sollten, zB werden Sie dies auf dem Bildschirm sehen:

 Usage: myscript.py database-name 

Die nächste if statement überprüft, ob der ‘databasename’, den Sie an das Skript übergeben haben, tatsächlich im Dateisystem vorhanden ist. Wenn nicht, erhalten Sie eine Nachricht wie folgt:

 ERROR: Database database-name was not found! 

Aus der Dokumentation :

argv [0] ist der Skriptname (abhängig davon, ob es sich um einen vollständigen Pfadnamen handelt oder nicht). Wenn der Befehl mit der Befehlszeilenoption -c für den Interpreter ausgeführt wurde, wird argv [0] auf die Zeichenfolge ‘-c’ gesetzt. Wenn kein Skriptname an den Python-Interpreter übergeben wurde, ist argv [0] die leere Zeichenfolge.

Hier ist ein gutes Beispiel in 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 

%s und %d sind Formatbezeichner oder Platzhalter für die Formatierung von Strings / Dezimalzahlen / Floats usw.

Am häufigsten verwendete Format-Spezifizierer:

%s : Zeichenfolge

%d : Dezimalstellen

%f : Gleitkommazahl

Selbsterklärender Code:

 name = "Gandalf" extendedName = "the Grey" age = 84 IQ = 149.9 print('type(name):', type(name)) #type(name):  print('type(age):', type(age)) #type(age):  print('type(IQ):', type(IQ)) #type(IQ):  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!"