2010-10-06 10 views
34

Jest to prawdopodobnie bardzo proste pytanie dla niektórych, ale mnie to zaskoczyło. Czy możesz używać zmiennych w potrójnych cytatach Pythona?W Pythonie, czy możesz mieć zmienne w potrójnych cytatach? Jeśli tak to jak?

W poniższym przykładzie, w jaki sposób używać zmiennych w tekście:

wash_clothes = 'tuesdays' 
clean_dishes = 'never' 

mystring =""" I like to wash clothes on %wash_clothes 
I like to clean dishes %clean_dishes 
""" 

print(mystring) 

chciałabym to doprowadzić do:

I like to wash clothes on tuesdays 
    I like to clean dishes never 

Jeśli nie, co jest najlepszym sposobem, aby obsługiwać duże kawałki tekstu, w którym potrzebujesz pary zmiennych, a jest mnóstwo tekstu i znaków specjalnych?

Odpowiedz

31

Jednym ze sposobów:

>>> mystring =""" I like to wash clothes on %s 
... I like to clean dishes %s 
... """ 
>>> wash_clothes = 'tuesdays' 
>>> clean_dishes = 'never' 
>>> 
>>> print mystring % (wash_clothes, clean_dishes) 
I like to wash clothes on tuesdays 
I like to clean dishes never 

Również spojrzeć na ciąg formatowania

+0

który jest idealny. Dzięki wielkie! Właśnie tego szukałem! Nie wiem dokładnie, skąd Python wie, który% s zastąpić jaką zmienną. Czy wygląda na kolejność zmiennych pojawiających się w: print mystring% (wash_clothes, clean_dishes) –

+0

@XL: Możesz rzucić okiem na inną technikę formatowania, dla której podałem link, ale przykład. Przykład został dostarczony przez NullUserException.Możesz użyć obu technik. – pyfunc

6

Tak. Wierzę, że to zadziała.

do_stuff = "Tuesday"

mystring = """I like to do stuff on %(tue)s""" % {'tue': do_stuff}

EDIT: Zapomniałem 's' w specyfikacją formatu.

+3

Jeśli masz zamiar wyznaczyć odpowiedź, powiedz dlaczego, abyśmy wszyscy mogli wyciągnąć naukę z błędu. – jonesy

+1

To jest świetne dla powtarzających się zmiennych. – AliBZ

42

Preferowanym sposobem osiągnięcia tego celu używa str.format() raczej niż metoda z użyciem %:

Ta metoda formatowania napisu to nowy standard w Pythonie 3.0, i powinny być preferowane do % formatowanie opisane w String Formatowanie operacji w nowym kodzie.

przykład:

wash_clothes = 'tuesdays' 
clean_dishes = 'never' 

mystring =""" I like to wash clothes on {0} 
I like to clean dishes {1} 
""" 

print mystring.format(wash_clothes, clean_dishes) 
8

myślę najprościej str.format() jak inni twierdzą.

Jednak pomyślałem, że wspomnę, że Python ma klasę string.Template począwszy od Python2.4.

Oto przykład z dokumentacji.

>>> from string import Template 
>>> s = Template('$who likes $what') 
>>> s.substitute(who='tim', what='kung pao') 
'tim likes kung pao' 

Jednym z powodów podoba mi się to użycie odwzorowania zamiast argumentów pozycyjnych.

+0

To interesujące podejście. Naprawdę nie lubię argumentów pozycyjnych, ponieważ może to być trudne, jeśli masz naprawdę dużą liczbę zmiennych. Mam tylko pytanie, czy ta metoda jest opłacalna, jeśli masz masywne ilości sformatowanego tekstu i znaków specjalnych w ciągu znaków szablonu? –

+2

możesz użyć argumentów pozycyjnych z 'format'. 'd = dict (foo = 1, bar = 2); "{foo} {bar}" .format (** d) ' – aaronasterling

+0

@martineau. tak. to był zdecydowanie tipo. – aaronasterling

1

Należy również pamiętać, że nie trzeba zmienną pośrednią:

name = "Alain" 
print """ 
Hello %s 
""" % (name) 
Powiązane problemy