2011-01-30 12 views

Odpowiedz

20
"{name} is a {adjective} {noun} that {verb}".format(**locals()) 
  • locals() daje odniesienie do bieżącej przestrzeni nazw (w słowniku).
  • rozpakowuje ten słownik argumentów słów kluczowych (f(**{'a': 0, 'b': 1}) jest f(a=0, b=1)).
  • .format() to "the new string formatting", które można przy okazji zrobić o wiele więcej (np. {0.name} dla atrybutu nazwy pierwszego argumentu pozycyjnego).

Alternatywnie, string.template (ponownie, z miejscowymi, jeśli chcesz uniknąć zbędnego zapisu literowego {'name': name, ...}).

+3

Aby uzyskać więcej informacji i opcji: http://docs.python.org/library/stdtypes.html#string-formatting – Harmen

+0

@Harem: +1 Szukałem tego linku, ale najpierw znalazłem PEP ... jakiś błąd w moim algorytmie wyszukiwania. – delnan

+1

Podawanie locals() do funkcji jest zazwyczaj bardzo złym pomysłem. Prowadzi to do pełzania parametrów, gdzie nie jest możliwe określenie, które zmienne są faktycznie przeznaczone do przekazania i które są faktycznie lokalnymi. –

4

dla Pythona 2 zrobić:

print name,'is a',adjective,noun,'that',verb 

Dla Pythona 3 dodaj parens:

print(name,'is a',adjective,noun,'that',verb) 

Jeśli chcesz zapisać go w łańcuchu, musisz połączyć się z operatorem +, a będziesz musiał wstawić spacje. print wstawia spację na wszystkich ,, chyba że na końcu parametrów znajduje się końcowy przecinek, w którym to przypadku rezygnuje z nowej linii.

Aby zapisać ciąg var:

result = name+' is a '+adjective+' '+noun+' that '+verb 
+0

pamiętać, że w Pyhon 2, to drukuje krotki zamiast niektórych ciągów;) (tylko upuść parens) – delnan

+0

Stałe dzięki delnan. –

5

użycie string.Template

>>> from string import Template 
>>> t = Template("$name is a $adjective $noun that $verb") 
>>> t.substitute(name="Lionel", adjective="awesome", noun="dude", verb="snores") 
'Lionel is a awesome dude that snores' 
+0

Awesome.Pochlebstwo dostaje cię * wszędzie * – Lionel

+0

Cokolwiek to będzie potrzebne, prawda? :) – bgporter

Powiązane problemy