2012-06-11 6 views
27

Załóżmy, że mam bardzo długi ciąg z argumentami, które chcę utworzyć. Wiem, że można utworzyć ciąg wielowierszowego zCiąg wieloliniowy z argumentami. Jak zadeklarować?

cmd = """line 1 
     line 2 
     line 3""" 

Ale teraz powiedzmy, że chcę przekazać 1, 2 i 3 jako argumenty.

Działa

cmd = """line %d 
     line %d 
     line %d""" % (1, 2, 3) 

Ale jeśli mam bardzo długi łańcuch z ponad 30 argumentów, jak mogę ewentualnie przekazać te argumenty w wielu wierszach? Przekazywanie ich w pojedynczej linii jest sprzeczne z celem nawet próby utworzenia ciągu wieloliniowego.

Dziękuję każdemu z góry za pomoc i wgląd.

Odpowiedz

19

Można nadużywać właściwości kontynuacji wiersza nawiasów ( i przecinka ,.

cmd = """line %d 
     line %d 
     line %d""" % (
     1, 
     2, 
     3) 
+0

Dziękuję bardzo. Dokładnie to, czego szukałem. Nigdy nie wiedziałem, że mogę używać wielu linii podczas używania nawiasów. To bardzo pomaga !!! – Quillion

2

Działa to dla mnie:

cmd = """line %d 
     line %d 
     line %d""" % (
      1, 
      2, 
      3 
    ) 
3

Aby mieć argumenty w tej samej linii są wstawiane, można zrobić to tak:

cmd = "line %d\n"%1 +\ 
     "line %d\n"%2 +\ 
     "line %d\n"%3 

[EDIT:] W Odpowiedz na pierwszy komentarz, który mi przedstawił:

cmd = "\n".join([ 
     "line %d"%1, 
     "line %d"%2, 
     "line %d"%3]) 
+0

Wykonanie tego z ponad 30 argumentami nie byłoby zbyt wydajne. '" ".join()' na liście, z drugiej strony ... :) –

48

Można użyć funkcji str.format(), która pozwala na nazwane argumenty. Więc

'''line {0} 
line {1} 
line {2}'''.format(1,2,3) 

Można oczywiście przedłużyć ten użyciem *args składni Pythona, co pozwala przechodzić w tuple lub list.

args = (1,2,3) 
'''line {0} 
line {1} 
line {2}'''.format(*args) 

Jeśli można inteligentnie wymienić swoje argumenty, najbardziej niezawodne rozwiązanie (choć jeden z najbardziej intensywnych typowania) byłoby użyć **kwargs składni Pythona przejść w słowniku.

args = {'arg1':1, 'arg2':2, 'arg3':3} 
'''line {arg1} 
line {arg2} 
line {arg3}'''.format(**args) 

Aby uzyskać więcej informacji na temat mini-język str.format(), przejdź tutaj: http://docs.python.org/library/string.html#format-string-syntax

+1

+1 ** Format kwargs jest świetny dla czytelności dla wielu scenariuszy (choć może nie jest to przykład OP). – Darthfett

2

One bardziej wariant z String.Format() - funkcja.

s = "{0} " \ 
    "{1} " \ 
    "{2}" \ 
    .format("Hello", "world", "from a multiline string")  
print(s) 
1

Najprostszym sposobem może być użycie literal string interpolation (dostępny z Pythonem 3.6 roku i przyjmując wszystkie argumenty są w zasięgu).

cmd = f"""line {1} 
     line {2} 
     line {3}""" 
Powiązane problemy