Ответы:
В 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-строки .
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 () из Поваренной книги 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
оператором. Вы можете, например, создать строку с помощьюs="a=%d,b=%d"%(f(x,n),g(x,n))
, а затем распечатать эту строку с помощьюprint s
.