Co to %sznaczy w Pythonie? A co robi następny fragment kodu?
Na przykład...
if len(sys.argv)<2:
sys.exit('Usage: %s database-name'% sys.argv[0])ifnot os.path.exists(sys.argv[1]):
sys.exit('ERROR: Database %s was not found!'% sys.argv[1])
W rzeczywistości PEP mówi: „W Pythonie 3.0 operator% jest uzupełniony o bardziej wydajną metodę formatowania ciągów znaków” i że jest przenoszony do Pythona 2.6. Skąd pochodzę „uzupełniony” oznacza dodany, a nie zastąpiony. PEP nie mówi „zastąpiony” iw żadnej części PEP nie mówi, że operator% jest przestarzały (ale mówi, że inne rzeczy są przestarzałe). Możesz preferować str.format i to jest w porządku, ale dopóki PEP nie powie, że jest przestarzały, nie ma sensu twierdzić, że tak nie jest.
Python obsługuje formatowanie wartości w łańcuchy. Chociaż może to obejmować bardzo skomplikowane wyrażenia, najbardziej podstawowym zastosowaniem jest wstawianie wartości do ciągu za pomocą %ssymbolu zastępczego.
Edycja: Oto naprawdę prosty przykład:
#Python2
name = raw_input("who are you? ")print"hello %s"%(name,)#Python3+
name = input("who are you? ")print("hello %s"%(name,))
%sToken pozwala mi wkładać (i potencjalnie format) ciąg. Zwróć uwagę, że %stoken jest zastępowany przez wszystko, co przekażę do ciągu po %symbolu. Zauważ również, że używam tutaj również krotki (gdy masz tylko jeden ciąg, użycie krotki jest opcjonalne), aby zilustrować, że wiele ciągów można wstawić i sformatować w jednej instrukcji.
Nie wiem o wcześniejszych wersjach, ale przynajmniej dla 3.6 działa tak samo, nawet jeśli używasz %sna liczbach całkowitych, zostanie po prostu przekonwertowany na ciąg.
@lapin masz rację :). ale nie zawsze tego chcesz. Powiedzmy, że chcesz wprowadzić cyfrę, na przykład. print('This number will be padded with 4 zeros: %05d ' % 1)- to zadziała. print('This number will be padded with 4 zeros: %05s ' % 1)- to się nie uda `
formatMetodę wprowadzono Pythonie 2.6. Jest bardziej wydajny i niewiele trudniejszy w użyciu:
>>>"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'
Ta odpowiedź byłaby lepsza, gdyby wyjaśniła, że składnia pytania dotyczy formatowania tekstu, a następnie zademonstrowała nowszą metodę. W ten sposób może stać samodzielnie. Podanie przykładu, który byłby równoważny z przykładem w pytaniu, również byłoby plusem.
%swskazuje typ konwersji ciągu znaków podczas korzystania z możliwości formatowania napisów w języku Python. Dokładniej, %skonwertuje określoną wartość na ciąg przy użyciu str()funkcji. Porównaj to z %rtypem konwersji, który używa repr()funkcji do konwersji wartości.
%si %dsą specyfikatorami formatu lub symbolami zastępczymi do formatowania ciągów / liczb dziesiętnych / liczb zmiennoprzecinkowych itp.
NAJBARDZIEJ powszechnie używany specyfikator formatu:
%s : strunowy
%d : dziesiętne
%f : pływak
Kod nieobjaśniający:
name ="Gandalf"
extendedName ="the Grey"
age =84
IQ =149.9print('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 methodprint('{} {}\'s age is {} with incredible IQ of {} '.format(name, extendedName, age, IQ))# with help of older methodprint("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!"
Odpowiadając na drugie pytanie: do czego służy ten kod? ...
Jest to dość standardowy kod sprawdzający błędy dla skryptu Pythona, który akceptuje argumenty wiersza poleceń.
Zatem pierwsze ifstwierdzenie oznacza: jeśli nie przekazałeś mi argumentu, powiem ci, jak powinieneś przekazać mi argument w przyszłości, np. Zobaczysz to na ekranie:
Usage: myscript.py database-name
Następna ifinstrukcja sprawdza, czy „nazwa-bazy danych”, którą przekazałeś do skryptu, faktycznie istnieje w systemie plików. Jeśli nie, otrzymasz następujący komunikat:
argv [0] to nazwa skryptu (zależy od systemu operacyjnego, czy jest to pełna ścieżka, czy nie). Jeśli polecenie zostało wykonane przy użyciu opcji wiersza poleceń -c do interpretera, argv [0] jest ustawiane na łańcuch „-c”. Jeśli żadna nazwa skryptu nie została przekazana do interpretera Pythona, argv [0] jest łańcuchem pustym.
>>> a = input("What is your name?")Whatis 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
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.
%Operator jest zastąpiona mocniejszegostr.formatmetody, zobacz PPG-3101 .