2013-06-12 14 views
5

Mam ciąg formatu, który tworzę dynamicznie na podstawie danych wprowadzanych przez użytkownika. Zbieram argumenty dla ciągu formatu na liście i chciałbym się dowiedzieć, jak rozpakować je na końcu łańcucha formatu. Widziałem kilka pytań, które wydają się z tym związane, ale jestem bardzo nowy w Pythonie i nie mogę zastosować ich rozwiązań w mojej sprawie.Python Rozpakuj listę argumentów dla formatu String

Pomysł co chciałbym zrobić, to:

my_string = "string contents" % tuple([for item in var_array]) 

Oczywiście to nie jest prawidłowa składnia, ale miejmy nadzieję, że opisuje to, co staram się robić: Chciałbym, aby rozpakować var_array jako moja lista argumentów bez znajomości długości zmiennej var_array przed czasem. Jak mogłem to zrobić?

Edytuj: Spróbuję lepiej wyjaśnić mój problem. Tworzę ciąg formatu, łącząc nieznaną liczbę ciągów formatu. Tak więc mój końcowy ciąg będzie miał zmienną liczbę% s, a zatem zmienną liczbę argumentów, które są gromadzone na liście.

Na przykład:

"My format string might have %s or %s arguments" %([arg_list]) //here arg_list has 2 arguments 

"But my format string might also have %s or %s or %s arguments. %([arg_list]) //here arg_list has 3 arguments 

Długość łańcucha formatu, a liczba argumentów są zmienne w oparciu o dane wprowadzone przez użytkownika, więc chcę, aby móc dołączać listy args na koniec końcowy ciąg. czy to możliwe?

+0

Przepraszam, nie rozumiem. Czy możesz podać niektóre przed i po przykładzie? –

+0

Próbowałem wyjaśnić ... – jac300

Odpowiedz

5

Oto podejście, które idzie z argumentów do sformatowany ciąg (sprawdzanie błędów jest jeszcze potrzebne):

>>> def StartDance(*args): 
     return "%d, %d, %d, %d!" % tuple(args) 

>>> StartDance(5, 6, 7, 8) 
'5, 6, 7, 8!' 

Oto bardziej niezawodne rozwiązanie do sprawdzania błędów, ale przedstawiam je jako osobną odpowiedź, biorąc pod uwagę, jak bardzo skomplikowana jest dodawana:

>>> def StartDance(*args): 
     return (", ".join(["%d"] * len(args))+"!") % tuple(args) 
>>> StartDance(5, 6, 7, 8) 
'5, 6, 7, 8!' 
>>> StartDance(5, 6, 7, 8, 9, 10) 
'5, 6, 7, 8, 9, 10!' 
>>> StartDance(1) 
'1!' 

I tu jest funkcją powrocie listę, która jest rozpakowany jako argumenty tylko, że te argumenty traktowane jako lista (Python jest zabawa :)

>>> StartDance(*range(5,9)) 
'5, 6, 7, 8!' 
+0

ah, to jest prawdopodobnie to, co PO chciał. +1 –

+0

ah ok ...Teraz widzę, jak to ma zastosowanie. Myślałem o tym niepoprawnie. Dziękuję Ci. – jac300

+0

ok, ale co, jeśli chcę przekazać listę funkcji, czy to możliwe? Tak jak gdybym to zrobił: StartDance (* range (len (my_array))) ... który zwraca indeksy tablicy, ale czy mogę przekazać tablicę tak, że opróżnia swoją połączoną zawartość? – jac300

3

Jesteś bardzo blisko, spróbuj coś takiego: "%s my %s is %s" % tuple(["Hi", "name", "butch"])

+1

_without znać długość var_array przed czasem_ – zondo

2

Zakładając, co chcesz zrobić na ciąg obsługuje wbudowane str można zrobić:

def join_args(*args): 
    return " ".join([str(x) for x in args]) 

print(join_args(1,2,3,4,5,6)) 
print(join_args('1','2','3','4')) 

Out:

1 2 3 4 5 6 
1 2 3 4 

można również użyć następujących bardziej elastycznego sznurka:

def join_args(fmstr, *args): 
    return fmstr.format(*args) 

print(join_args("One: {} Two: {} Three: {} Four: {}", 1,2,3,4)) 

Out:

One: 1 Two: 2 Three: 3 Four: 4 

Wystarczy upewnić się, że są w równej liczbie args i {}.