nazwanych pól zamienne (the {...}
części w format string) meczu z argumentów kluczowych do metody .format()
, a nie pozycyjnych argumentów.
Argumenty słów kluczowych są jak klucze w słowniku; zamówienie nie ma znaczenia, ponieważ są one dopasowane do nazwy o nazwie.
Jeśli chciał dopasować przeciwko pozycyjnych argumentów używać liczb:
"{0} {1}".format(10, 20)
W Pythonie 2.7 i wyżej, można pominąć liczby; pola zamienne {}
są następnie automatycznie numerowane w kolejności pojawiania się w ciągu formatowania:
"{} {}".format(10, 20)
Łańcuch formatowania może mecz z obu pozycyjnych i argumentów kluczowych, można użyć argumentów wielokrotnie:
"{1} {ham} {0} {foo} {1}".format(10, 20, foo='bar', ham='spam')
Cytowanie z format string specification:
field_name samo w sobie zaczyna się od nazwa_argumentu, która jest albo numer lub słowo kluczowe. Jeśli jest to liczba, odnosi się do argumentu pozycyjnego, a jeśli jest to słowo kluczowe, odnosi się do argumentu o nazwie słowa kluczowego.
Podkreślam moją.
Jeśli tworzysz duży ciąg formatowania, często jest on o wiele bardziej czytelny i łatwiejszy w użyciu, aby używać nazwanych pól zastępczych, więc nie musisz odliczać argumentów i dowiedzieć się, jaki argument trafia w wynikowy ciąg znaków .
Można również użyć **keywords
nazywając składni zastosować istniejący słownika do formatu, dzięki czemu można łatwo włączyć plik CSV w sformatowanym wyjściu:
import csv
fields = ('category', 'code', 'price', 'description', 'link', 'picture', 'plans')
table_row = '''\
<tr>
<td><img src="{picture}"></td>
<td><a href="{link}">{description}</a> ({price:.2f})</td>
</tr>
'''
with open(filename, 'rb') as infile:
reader = csv.DictReader(infile, fieldnames=fields, delimiter='\t')
for row in reader:
row['price'] = float(row['price']) # needed to make `.2f` formatting work
print table_row.format(**row)
Tutaj picture
, link
, description
i price
są wszystkie klucze w słowniku row
i o wiele łatwiejsze jest , aby zobaczyć, co stanie się, gdy zastosuję row
do ciągu formatowania.
Myślę, że są po prostu dla czytelności. – svineet
Ponieważ szuka go po imieniu, a nie pozycji ... jak sądzisz, co oznaczają te argumenty? – aaa90210
Wygląda na to, że po prostu zmieniono nazwę na arg2 na arg1 i na odwrót. innymi słowy, arg1 ma teraz wartość 20 zamiast 10, dlatego pierwsza liczba w tekście ciągu jest równa 20 zamiast 10. Aby wykonać test, który chciałeś, wystarczy przesunąć argumenty ORAZ ich wartości do nowej pozycji w wywołanie format() i będzie zachowywać się tak, jak oczekujesz. Nic tu nie jest niezwykłe. –