Wydrukuj wiele argumentów w Pythonie


309

To tylko fragment mojego kodu:

print("Total score for %s is %s  ", name, score)

Ale chcę to wydrukować:

„Łączny wynik dla (nazwa) to (wynik)”

gdzie namejest zmienną na liście i scorejest liczbą całkowitą. To jest Python 3.3, jeśli to w ogóle pomaga.

Odpowiedzi:


559

Istnieje wiele sposobów, aby to zrobić. Aby naprawić bieżący kod za pomocą %-formatting, musisz przekazać krotkę:

  1. Podaj jako krotkę:

    print("Total score for %s is %s" % (name, score))

Krotka z pojedynczym elementem wygląda ('this',).

Oto kilka innych typowych sposobów:

  1. Przekaż jako słownik:

    print("Total score for %(n)s is %(s)s" % {'n': name, 's': score})

Istnieje również formatowanie ciągów w nowym stylu, które może być nieco łatwiejsze do odczytania:

  1. Użyj formatowania ciągów w nowym stylu:

    print("Total score for {} is {}".format(name, score))
  2. Używaj formatowania ciągów w nowym stylu z liczbami (przydatne do ponownego zamawiania lub drukowania tego samego jeden raz):

    print("Total score for {0} is {1}".format(name, score))
  3. Używaj formatowania ciągów w nowym stylu z wyraźnymi nazwami:

    print("Total score for {n} is {s}".format(n=name, s=score))
  4. Połącz ciągi znaków:

    print("Total score for " + str(name) + " is " + str(score))

Najjaśniejsze dwa, moim zdaniem:

  1. Po prostu przekaż wartości jako parametry:

    print("Total score for", name, "is", score)

    Jeśli nie chcesz, aby spacje były wstawiane automatycznie printw powyższym przykładzie, zmień sepparametr:

    print("Total score for ", name, " is ", score, sep='')

    Jeśli używasz języka Python 2, nie będziesz mógł użyć dwóch ostatnich, ponieważ printnie jest to funkcja w języku Python 2. Możesz jednak zaimportować to zachowanie z __future__:

    from __future__ import print_function
  2. Użyj nowego fformatowania ciągów w Pythonie 3.6:

    print(f'Total score for {name} is {score}')

7
oczywiście zawsze istnieje odwieczna odrzucona metoda:print("Total score for "+str(name)"+ is "+str(score))
Snakes and Coffee

5
@SnakesandCoffee: Po prostu to zrobięprint("Total score for", name, "is", score)
Blender

4
Moje +1. Obecnie wolę te .format()bardziej czytelne niż starsze % (tuple)- chociaż widziałem testy, które pokazują, że %interpolacja jest szybsza. print('xxx', a, 'yyy', b)Jest również dobre dla prostych przypadków. Polecam także uczyć się .format_map()ze słownikiem jako argumentem, a przy pomocy 'ssss {key1} xxx {key2}'- fajne do generowania tekstów z szablonów. Jest też starszy string_template % dictionary. Ale szablony nie wyglądają tak czysty: 'ssss %(key1)s xxx %(key2)s'.
pepr

6
FYI, jak Pythona 3.6, otrzymujemy f-strun , więc może teraz też zrobić print(f"Total score for {name} is {score}")bez wyraźnych wywołań funkcji (jak długo namei scoresą w zakresie oczywiście).
ShadowRanger,

57

Istnieje wiele sposobów na wydrukowanie tego.

Spójrzmy na inny przykład.

a = 10
b = 20
c = a + b

#Normal string concatenation
print("sum of", a , "and" , b , "is" , c) 

#convert variable into str
print("sum of " + str(a) + " and " + str(b) + " is " + str(c)) 

# if you want to print in tuple way
print("Sum of %s and %s is %s: " %(a,b,c))  

#New style string formatting
print("sum of {} and {} is {}".format(a,b,c)) 

#in case you want to use repr()
print("sum of " + repr(a) + " and " + repr(b) + " is " + repr(c))

EDIT :

#New f-string formatting from Python 3.6:
print(f'Sum of {a} and {b} is {c}')

3
print("sum of {0} and {1} is {2}".format(a,b,c)) to przesada, możesz to pominąć, print("sum of {} and {} is {}".format(a,b,c)) chyba że chcesz zmienić kolejność.
Jean-François Fabre

38

Użyj .format():

print("Total score for {0} is {1}".format(name, score))

Lub:

// Recommended, more readable code

print("Total score for {n} is {s}".format(n=name, s=score))

Lub:

print("Total score for" + name + " is " + score)

Lub:

`print("Total score for %s is %d" % (name, score))`

21

W Pythonie 3.6 f-stringjest znacznie czystszy.

We wcześniejszej wersji:

print("Total score for %s is %s. " % (name, score))

W Python 3.6:

print(f'Total score for {name} is {score}.')

zrobi.

Jest bardziej wydajny i elegancki.


15

Upraszczając, osobiście lubię konkatenację ciągów znaków:

print("Total score for " + name + " is " + score)

Działa zarówno z Pythonem 2.7, jak i 3.X.

UWAGA: Jeśli wynik jest liczbą całkowitą , należy go przekonwertować na str :

print("Total score for " + name + " is " + str(score))


11

Po prostu wykonaj to

idiot_type = "the biggest idiot"
year = 22
print("I have been {} for {} years ".format(idiot_type, years))

LUB

idiot_type = "the biggest idiot"
year = 22
print("I have been %s for %s years."% (idiot_type, year))

I zapomnij o wszystkich innych, inaczej mózg nie będzie w stanie zmapować wszystkich formatów.



6

Użyj f-string:

print(f'Total score for {name} is {score}')

Lub

Użyj .format:

print("Total score for {} is {}".format(name, score))

5

Jeśli scorejest liczbą, to

print("Total score for %s is %d" % (name, score))

Jeśli wynik jest łańcuchem, to

print("Total score for %s is %s" % (name, score))

Jeśli wynik jest liczbą, to jest %d, jeśli jest łańcuchem, to jest %s, jeśli wynik jest liczbą zmiennoprzecinkową, to jest%f


3

To jest to, co robie:

print("Total score for " + name + " is " + score)

Pamiętaj, aby wstawić spację forprzed i przed i po is.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.