Rubinowy przykład:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
Udana konkatenacja ciągów w języku Python jest dla mnie pozornie gadatliwa.
Rubinowy przykład:
name = "Spongebob Squarepants"
puts "Who lives in a Pineapple under the sea? \n#{name}."
Udana konkatenacja ciągów w języku Python jest dla mnie pozornie gadatliwa.
name
zmienna lokalna leży w ciągu, aw Pythonie musisz jawnie przekazać słownik zmiennych lokalnych do formatera ciągu, jeśli chcesz, aby z nich korzystał.Odpowiedzi:
Python 3.6 doda dosłowną interpolację łańcuchów podobną do interpolacji łańcuchów Ruby. Począwszy od tej wersji Pythona (która ma zostać wydana do końca 2016 r.), Będziesz mógł dołączyć wyrażenia do „f-string”, np.
Przed wersją 3.6 najbliżej tego można się dostać
%
Operator może być używany do interpolacji smyczkowy w Pythonie. Pierwszy argument jest ciągiem, który ma być interpolowany, drugi może mieć różne typy, w tym „mapowanie”, odwzorowywanie nazw pól na wartości, które mają być interpolowane. Tutaj użyłem słownika zmiennych lokalnychlocals()
do mapowania nazwy polaname
na jego wartość jako zmiennej lokalnej.Ten sam kod przy użyciu
.format()
metody najnowszych wersji Pythona wyglądałby następująco:Jest też
string.Template
klasa:źródło
%s
łańcucha i%03d
liczby dopełnianej do 3 cyfr z zerami wiodącymi. Można to po prostu napisaćprint "%s has %03d" % ("Python", 2)
. W przykładzie wykorzystano następnie umieszczenie klucza nawiasowego w nawiasach, po%
którym można nadać symbolom zastępczym znaczące nazwy, a nie polegać na ich kolejności w ciągu. Następnie przekazujesz słownik, który mapuje nazwy kluczy na ich wartości. Właśnie dlatego Sven korzysta zlocals()
funkcji, która zwraca dykt zawierający wszystkie zmienne lokalne, dzięki czemu będziename
s
jako typu konwersji - Python może konwertować prawie wszystko na ciąg. Ale oczywiście straciłbyś specjalne możliwości formatowania innych typów konwersji.Od wersji Python 2.6.X możesz użyć:
źródło
%
operator interpolacji łańcuchów nie jest przestarzały w Pythonie 3.x. docs.python.org/dev/py3k/whatsnew/… ogłasza plan wycofania się%
z wersji 3.1, ale tak się nigdy nie stało.{}
można wyeliminować.Opracowałem pakiet interpy , który umożliwia interpolację łańcuchów w Pythonie .
Wystarczy zainstalować za pośrednictwem
pip install interpy
. A następnie dodaj linię# coding: interpy
na początku swoich plików!Przykład:
źródło
Interpolacja ciągów znaków w Pythonie jest podobna do printf () C
Jeśli spróbujesz:
Tag
%s
zostanie zastąpionyname
zmienną. Powinieneś spojrzeć na tagi funkcji drukowania: http://docs.python.org/library/functions.htmlźródło
print "First is %s, second is %s" % (var1, var2)
.Interpolacja ciągów zostanie uwzględniona w Pythonie 3.6, jak określono w PEP 498 . Będziesz mógł to zrobić:
Zauważ, że nienawidzę Spongeboba, więc napisanie tego było nieco bolesne. :)
źródło
Możesz też to mieć
http://docs.python.org/2/library/string.html#formatstrings
źródło
#
je wydrukować. Po prostu używają składni Ruby.#
postać zostanie wydrukowana.Stosowanie:
PS: wydajność może stanowić problem. Jest to przydatne w przypadku skryptów lokalnych, a nie dzienników produkcyjnych.
Powielone:
Formatowanie napisów w języku Python:% vs. .format
Co to jest odpowiednik osadzenia wyrażenia w ciągu znaków w Pythonie? (tj. „# {expr}” w Ruby)
Co to jest odpowiednik Rubiego w Pythonie `s =" witaj,% s. Gdzie jest% s? " % („John”, „Mary”) `
Czy istnieje Python równoważny interpolacji ciągów Ruby?
źródło
W przypadku starego Pythona (testowanego w wersji 2.4) najlepsze rozwiązanie wskazuje drogę. Możesz to zrobić:
I dostajesz
źródło
Python 3.6 i nowsze mają interpolację ciągów literalnych za pomocą f-stringów:
źródło