Odpowiedzi:
W Pythonie2 printbyło słowo kluczowe, które wprowadzało instrukcję:
print "Hi"
W Pythonie3 printjest to funkcja, która może zostać wywołana:
print ("Hi")
W obu wersjach %jest operatorem, który wymaga łańcucha po lewej stronie i wartości lub krotki wartości lub obiektu mapującego (takiego jak dict) po prawej stronie.
Twoja linia powinna więc wyglądać następująco:
print("a=%d,b=%d" % (f(x,n),g(x,n)))
Ponadto zaleceniem dla Python3 i nowszych jest użycie {}formatowania -styl zamiast formatowania -styl %:
print('a={:d}, b={:d}'.format(f(x,n),g(x,n)))
Python 3.6 wprowadza kolejny paradygmat formatowania ciągów : f-strings .
print(f'a={f(x,n):d}, b={g(x,n):d}')
print('a={first:4.2f}, b={second:03d}'.format(first=f(x,n),second=g(x,n))) gdzie ten przykład pokazuje, jak możesz użyć modyfikatorów w stylu printf i nadal używać słów kluczowych.
Prosta funkcja printf () z książki O'Reilly's Python Cookbook .
import sys
def printf(format, *args):
sys.stdout.write(format % args)
Przykładowe dane wyjściowe:
i = 7
pi = 3.14159265359
printf("hi there, i=%d, pi=%.2f\n", i, pi)
# hi there, i=7, pi=3.14
PRINTi FORMAT...? Cofnij się w czasie 60+ lat do czasów
Python 3.6 wprowadził f-stringi do interpolacji liniowej. Jeszcze ładniejsze jest to, że rozszerzył składnię, aby umożliwić również specyfikatory formatu z interpolacją. Coś, nad czym pracowałem, przeglądając to w Google (i natknąłem się na to stare pytanie!):
print(f'{account:40s} ({ratio:3.2f}) -> AUD {splitAmount}')
PEP 498 ma szczegóły. I ... posortował moje zdenerwowanie ze specyfikatorami formatu w innych językach - pozwala na specyfikatory, które same mogą być wyrażeniami! Yay! Zobacz: Specyfikatory formatu .
Prosty przykład:
print("foo %d, bar %d" % (1,2))
Prostszy.
def printf(format, *values):
print(format % values )
Następnie:
printf("Hello, this is my name %s and my age %d", "Martin", 20)
Ponieważ twój %jest poza print(...)nawiasami, próbujesz wstawić zmienne w wyniku swojej printrozmowy. print(...)powraca None, więc to nie zadziała, i jest też drobna kwestia, że już wydrukowałeś swój szablon do tego czasu, a podróże w czasie są zabronione przez prawa wszechświata, w którym zamieszkujemy.
Cała rzecz, którą chcesz wydrukować, łącznie z %operandem i jego operandem, musi znajdować się wewnątrz twojego print(...)wywołania, aby łańcuch mógł zostać zbudowany przed jego wydrukowaniem.
print( "a=%d,b=%d" % (f(x,n), g(x,n)) )
Dodałem kilka dodatkowych spacji, aby było wyraźniej (choć nie są one konieczne i generalnie nie są uważane za dobry styl).
Innymi słowy printf nieobecny w Pythonie ... Jestem zaskoczony! Najlepszy kod to
def printf(format, *args):
sys.stdout.write(format % args)
Dzięki temu formularzowi nie można drukować \ n. Wszyscy inni nie. Dlatego druk jest złym operatorem. A także potrzebujesz pisać argumenty w specjalnej formie. Powyżej nie ma żadnych wad w działaniu. Jest to standardowa zwykła forma funkcji printf.
print("Name={}, balance={}".format(var-name, var-balance))
%zawsze był operatorem łańcuchowym, niezwiązanym zprintinstrukcją. Możesz na przykład utworzyć ciąg za pomocąs="a=%d,b=%d"%(f(x,n),g(x,n)), a następnie wydrukować ten ciąg za pomocąprint s.