Відповіді:
У Python2 printбуло ключове слово, яке вводило вислів:
print "Hi"
У Python3 print- це функція, яку можна викликати:
print ("Hi")
В обох версіях %- це оператор, якому потрібна рядок з лівого боку, а праворуч - значення або кордона значень або об'єкт відображення (наприклад dict).
Отже, ваша лінія повинна виглядати так:
print("a=%d,b=%d" % (f(x,n),g(x,n)))
Крім того, рекомендація для Python3 та новіших версій - використовувати {}форматування -style замість форматування -style %:
print('a={:d}, b={:d}'.format(f(x,n),g(x,n)))
Python 3.6 представляє ще одну парадигму форматування рядків : f-string .
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))) де цей приклад показує, як можна використовувати модифікатори стилю printf і все ще використовувати ключові слова.
Найбільш рекомендований спосіб - це використовувати formatметод. Детальніше про це читайте тут
a, b = 1, 2
print("a={0},b={1}".format(a, b))
Проста функція printf () від кухонної книги O'Reilly's Python .
import sys
def printf(format, *args):
sys.stdout.write(format % args)
Приклад виводу:
i = 7
pi = 3.14159265359
printf("hi there, i=%d, pi=%.2f\n", i, pi)
# hi there, i=7, pi=3.14
PRINTі FORMAT...? Ще в момент 60+ років в дні FORTRAN :)
Python 3.6 представив f-рядки для вбудованої інтерполяції. Що ще приємніше - це розширення синтаксису, що також дозволяє специфікатори формату з інтерполяцією. Щось над цим я працював, переглядаючи це (і натрапив на це старе питання!):
print(f'{account:40s} ({ratio:3.2f}) -> AUD {splitAmount}')
PEP 498 містить деталі. І ... це сортувало мого домашнього улюбленця з специфікаторами формату в інших мовах - дозволяє специфікаторам, що самі можуть бути виразами! Так! Див.: Специфікатори форматування .
Простий приклад:
print("foo %d, bar %d" % (1,2))
Простіший.
def printf(format, *values):
print(format % values )
Тоді:
printf("Hello, this is my name %s and my age %d", "Martin", 20)
Оскільки ваша межа %знаходиться поза print(...)круглими дужками, ви намагаєтеся вставити свої змінні в результат вашого printдзвінка. print(...)повертається None, тож це не спрацює, і там також є невелика справа про те, що ви вже надрукували ваш шаблон до цього часу та подорожі в часі, заборонені законами всесвіту, в якому ми живемо.
Все, що ви хочете надрукувати, включаючи %операнд та його операнд, повинно бути всередині вашого print(...)дзвінка, щоб струна могла бути побудована до друку.
print( "a=%d,b=%d" % (f(x,n), g(x,n)) )
Я додав кілька додаткових пробілів, щоб зробити це більш зрозумілим (хоча вони не потрібні і взагалі не вважаються хорошим стилем).
Інші слова printf відсутні в python ... Я здивований! Кращий код
def printf(format, *args):
sys.stdout.write(format % args)
Через цю форму дозволяє не друкувати \ n Усі інші ні. Ось чому друк - це поганий оператор. А також вам потрібно написати аргументи в спеціальній формі. Немає недоліків у функціях, наведених вище. Це стандартна звичайна форма функції printf.
print("Name={}, balance={}".format(var-name, var-balance))
%завжди був оператором рядків, не пов'язаним зprintоператором. Наприклад, ви можете створити рядок за допомогоюs="a=%d,b=%d"%(f(x,n),g(x,n)), а потім надрукувати цей рядок за допомогоюprint s.