Fprint 22 как принтер
Обновлено: 24.11.2024
Пакет fmt реализует форматированный ввод-вывод с функциями, аналогичными printf и scanf языка C. «Глаголы» формата заимствованы из C, но они проще.
Печать
Число с плавающей запятой и сложные составляющие:
Строка и срез байтов (обрабатываются эквивалентно этим глаголам):
Формат по умолчанию для %v:
Для составных объектов элементы печатаются с использованием этих правил, рекурсивно, следующим образом:
Ширина определяется необязательным десятичным числом, непосредственно предшествующим глаголу. Если отсутствует, ширина равна той, которая необходима для представления значения. Точность указывается после (необязательной) ширины точкой, за которой следует десятичное число. Если период отсутствует, используется точность по умолчанию. Точка без следующего за ней числа указывает точность, равную нулю. Примеры:
Ширина и точность измеряются в кодовых точках Unicode, то есть в рунах. (Это отличается от printf языка C, где единицы всегда измеряются в байтах.) Любой или оба флага могут быть заменены символом '*', в результате чего их значения будут получены из следующего операнда (предшествующего форматируемому), который должен быть типа int.
Для большинства значений ширина – это минимальное количество рун для вывода, при необходимости дополняя отформатированную форму пробелами.
Однако для строк, байтовых срезов и байтовых массивов точность ограничивает длину форматируемого ввода (а не размер вывода), при необходимости усекая его. Обычно он измеряется в рунах, но для этих типов при форматировании в формате %x или %X он измеряется в байтах.
Для комплексных чисел ширина и точность применяются к двум компонентам независимо, а результат заключен в скобки, поэтому %f, примененный к 1,2+3,4i, дает (1,200000+3,400000i).
Для каждой функции, подобной Printf, есть также функция Print, которая не принимает формат и эквивалентна произнесению %v для каждого операнда. Другой вариант Println вставляет пробелы между операндами и добавляет новую строку.
Независимо от глагола, если операнд является значением интерфейса, используется внутреннее конкретное значение, а не сам интерфейс. Таким образом:
За исключением случаев вывода с использованием команд %T и %p, к операндам, реализующим определенные интерфейсы, применяются особые правила форматирования. В порядке применения:
<р>1. Если операндом является Reflect.Value, операнд заменяется конкретным значением, которое он содержит, и печать продолжается со следующего правила. <р>2. Если операнд реализует интерфейс Formatter, он будет вызван. В этом случае интерпретация глаголов и флагов контролируется этой реализацией.Если формат (который неявно %v для Println и т. д.) действителен для строки (%s %q %v %x %X), применяются следующие два правила:
<р>4. Если операнд реализует интерфейс ошибки, будет вызван метод Error для преобразования объекта в строку, которая затем будет отформатирована в соответствии с требованиями глагола (если есть). <р>5. Если операнд реализует строку метода String(), этот метод будет вызываться для преобразования объекта в строку, которая затем будет отформатирована в соответствии с требованиями глагола (если есть).Для составных операндов, таких как срезы и структуры, формат рекурсивно применяется к элементам каждого операнда, а не к операнду в целом. Таким образом, %q будет заключать в кавычки каждый элемент фрагмента строк, а %6.2f будет управлять форматированием каждого элемента массива с плавающей запятой.
Однако при печати фрагмента байта со строковым глаголом (%s %q %x %X) он обрабатывается так же, как и строка, как отдельный элемент.
Чтобы избежать рекурсии в таких случаях, как
преобразовать значение перед повторением:
Бесконечная рекурсия также может быть вызвана самореферентными структурами данных, такими как срез, который содержит себя как элемент, если этот тип имеет метод String. Однако такие патологии встречаются редко, и упаковка не защищает от них.
При печати структуры fmt не может и поэтому не вызывает методы форматирования, такие как Error или String, для неэкспортированных полей.
Явные индексы аргументов
В Printf, Sprintf и Fprintf по умолчанию каждая команда форматирования форматирует последовательные аргументы, переданные в вызове. Однако обозначение [n] непосредственно перед глаголом указывает, что вместо этого должен форматироваться n-й аргумент с одним индексом. То же самое обозначение перед '*' для ширины или точности выбирает индекс аргумента, содержащий значение. После обработки выражения в квадратных скобках [n] последующие глаголы будут использовать аргументы n+1, n+2 и т. д., если не указано иное.
получит "22 11", а
получит "12.00". Поскольку явный индекс влияет на последующие команды, эту нотацию можно использовать для многократного вывода одних и тех же значений путем сброса индекса для первого повторяющегося аргумента:
получит "16 17 0x10 0x11".
Ошибки формата
Если для команды указан недопустимый аргумент, например, предоставление строки для %d, сгенерированная строка будет содержать описание проблемы, как в следующих примерах:
Все ошибки начинаются со строки "%!" за которым иногда следует один символ (глагол) и заканчивается описанием в скобках.
Если метод Error или String вызывает панику при вызове подпрограммой печати, пакет fmt переформатирует сообщение об ошибке из паники, украсив его указанием на то, что оно пришло через пакет fmt. Например, если метод String вызывает panic("bad"), результирующее отформатированное сообщение будет выглядеть так:
%!s просто показывает команду печати, используемую в момент возникновения сбоя. Однако, если паника вызвана нулевым приемником для метода Error или String, на выходе будет неукрашенная строка, " ".
Сканирование
Аналогичный набор функций сканирует форматированный текст, чтобы получить значения. Scan, Scanf и Scanln читаются из os.Stdin; Fscan, Fscanf и Fscanln читают из указанного io.Reader; Sscan, Sscanf и Sscanln считывают из строки аргумента.
Scan, Fscan, Sscan интерпретируют новые строки во входных данных как пробелы.
Scanln, Fscanln и Sscanln останавливают сканирование на новой строке и требуют, чтобы за элементами шла новая строка или конец файла.
Scanf, Fscanf и Sscanf анализируют аргументы в соответствии со строкой формата, аналогичной Printf. В последующем тексте «пробел» означает любой пробельный символ Unicode, кроме символа новой строки.
В строке формата глагол, представленный символом %, потребляет и анализирует ввод; эти глаголы описаны более подробно ниже. Символ, отличный от %, пробела или новой строки в формате, потребляет именно тот входной символ, который должен присутствовать. Новая строка с нулем или более пробелов перед ней в строке формата потребляет ноль или более пробелов во входных данных, за которыми следует одна новая строка или конец ввода. Пробел, следующий за новой строкой в строке формата, занимает ноль или более пробелов во входных данных. В противном случае любой запуск одного или нескольких пробелов в строке формата требует максимально возможного количества пробелов во входных данных. Если ряд пробелов в строке формата не появляется рядом с новой строкой, при выполнении должен быть использован хотя бы один пробел из ввода или найден конец ввода.
Обработка пробелов и новых строк отличается от обработки семейства scanf языка C: в C символы новой строки обрабатываются как любые другие пробелы, и это никогда не является ошибкой, когда набор пробелов в строке формата не находит пробелов для использования в строке. ввод.
Ввод, обрабатываемый глаголами, неявно разделен пробелами: реализация каждого глагола, кроме %c, начинается с отбрасывания начальных пробелов из оставшегося ввода, а глагол %s (и чтение %v в строку) перестает потреблять ввод в момент первый пробел или символ новой строки.
Знакомые базовые префиксы 0b (двоичные), 0o и 0 (восьмеричные) и 0x (шестнадцатеричные) принимаются при сканировании целых чисел без формата или с глаголом %v, как и знаки подчеркивания, разделяющие цифры. р>
Ширина интерпретируется во входном тексте, но нет синтаксиса для точного сканирования (нет %5.2f, только %5f). Если задана ширина, она применяется после обрезания начальных пробелов и указывает максимальное количество рун, которое нужно прочитать, чтобы выполнить глагол. Например,
установит для s значение "12345", а для i значение 67, а
установит для s значение "12", а для i значение 34.
Во всех функциях сканирования возврат каретки, за которым сразу следует новая строка, обрабатывается как простая новая строка (\r\n означает то же, что и \n).
Во всех функциях сканирования, если операнд реализует метод Scan (то есть реализует интерфейс сканера), этот метод будет использоваться для сканирования текста для этого операнда. Кроме того, если число просканированных аргументов меньше числа предоставленных аргументов, возвращается ошибка.
Все сканируемые аргументы должны быть либо указателями на базовые типы, либо реализациями интерфейса сканера.
Подобно Scanf и Fscanf, Sscanf не должен потреблять весь ввод. Невозможно восстановить, какая часть входной строки использовалась Sscanf.
Примечание. Fscan и другие программы могут считывать один символ (руну) после возвращаемого ими ввода, а это означает, что цикл, вызывающий процедуру сканирования, может пропустить часть ввода. Обычно это проблема только в том случае, если между входными значениями нет пробела. Если средство чтения, предоставленное Fscan, реализует ReadRune, этот метод будет использоваться для чтения символов. Если ридер также реализует UnreadRune, этот метод будет использоваться для сохранения символа, и последующие вызовы не будут терять данные. Чтобы присоединить методы ReadRune и UnreadRune к считывателю без такой возможности, используйте bufio.NewReader.
Эти примеры демонстрируют основы печати с использованием строки формата. Printf, Sprintf и Fprintf принимают строку формата, указывающую, как форматировать последующие аргументы. Например, %d (мы называем это «глаголом») говорит вывести соответствующий аргумент, который должен быть целым числом (или чем-то, содержащим целое число, например, часть целых чисел) в десятичном виде.Глагол %v («v» вместо «значение») всегда форматирует аргумент в его форме по умолчанию, именно так, как это показали бы Print или Println. Специальная команда %T («T» для «Типа») печатает тип аргумента, а не его значение. Примеры не являются исчерпывающими; подробности см. в комментарии к пакету.
Print, Println и Printf размещают свои аргументы по-разному. В этом примере мы можем сравнить их поведение. Println всегда добавляет пробелы между печатаемыми элементами, в то время как Print добавляет пробелы только между нестроковыми аргументами, а Printf делает именно то, что ему говорят. Sprint, Sprintln, Sprintf, Fprint, Fprintln и Fprintf ведут себя так же, как их соответствующие функции Print, Println и Printf, показанные здесь.
Этот пакет находится не в последней версии модуля.
Подробнее
Система модулей Go была представлена в Go 1.11 и является официальным решением для управления зависимостями для Go.
Распространяемые лицензии накладывают минимальные ограничения на использование, изменение и распространение программного обеспечения.
Модули с помеченными версиями позволяют импортерам создавать более предсказуемые сборки.
Когда проект достигает основной версии v1, он считается стабильным.
Репозиторий
Документация ¶
Обзор ¶
Пакет fmt реализует форматированный ввод-вывод с функциями, аналогичными printf и scanf языка C. «Глаголы» формата заимствованы из C, но они проще.
Печать ¶
Число с плавающей запятой и сложные составляющие:
Строка и срез байтов (обрабатываются эквивалентно этим глаголам):
Формат по умолчанию для %v:
Для составных объектов элементы печатаются с использованием этих правил, рекурсивно, следующим образом:
Ширина определяется необязательным десятичным числом, непосредственно предшествующим глаголу. Если отсутствует, ширина равна той, которая необходима для представления значения. Точность указывается после (необязательной) ширины точкой, за которой следует десятичное число. Если период отсутствует, используется точность по умолчанию. Точка без следующего за ней числа указывает точность, равную нулю. Примеры:
Ширина и точность измеряются в кодовых точках Unicode, то есть в рунах. (Это отличается от printf языка C, где единицы всегда измеряются в байтах.) Любой или оба флага могут быть заменены символом '*', в результате чего их значения будут получены из следующего операнда (предшествующего форматируемому), который должен быть типа int.
Для большинства значений ширина – это минимальное количество рун для вывода, при необходимости дополняя отформатированную форму пробелами.
Однако для строк, байтовых срезов и байтовых массивов точность ограничивает длину форматируемого ввода (а не размер вывода), при необходимости усекая его. Обычно он измеряется в рунах, но для этих типов при форматировании в формате %x или %X он измеряется в байтах.
Для комплексных чисел ширина и точность применяются к двум компонентам независимо, а результат заключен в скобки, поэтому %f, примененный к 1,2+3,4i, дает (1,200000+3,400000i).
Для каждой функции, подобной Printf, есть также функция Print, которая не принимает формат и эквивалентна произнесению %v для каждого операнда. Другой вариант Println вставляет пробелы между операндами и добавляет новую строку.
Независимо от глагола, если операнд является значением интерфейса, используется внутреннее конкретное значение, а не сам интерфейс. Таким образом:
За исключением случаев вывода с использованием команд %T и %p, к операндам, реализующим определенные интерфейсы, применяются особые правила форматирования. В порядке применения:
<р>1. Если операндом является Reflect.Value, операнд заменяется конкретным значением, которое он содержит, и печать продолжается со следующего правила. <р>2. Если операнд реализует интерфейс Formatter, он будет вызван. В этом случае интерпретация глаголов и флагов контролируется этой реализацией.Если формат (который неявно %v для Println и т. д.) действителен для строки (%s %q %v %x %X), применяются следующие два правила:
<р>4. Если операнд реализует интерфейс ошибки, будет вызван метод Error для преобразования объекта в строку, которая затем будет отформатирована в соответствии с требованиями глагола (если есть). <р>5. Если операнд реализует строку метода String(), этот метод будет вызываться для преобразования объекта в строку, которая затем будет отформатирована в соответствии с требованиями глагола (если есть).Для составных операндов, таких как срезы и структуры, формат рекурсивно применяется к элементам каждого операнда, а не к операнду в целом. Таким образом, %q будет заключать в кавычки каждый элемент фрагмента строк, а %6.2f будет управлять форматированием каждого элемента массива с плавающей запятой.
Однако при печати фрагмента байта со строковым глаголом (%s %q %x %X) он обрабатывается так же, как и строка, как отдельный элемент.
Чтобы избежать рекурсии в таких случаях, как
преобразовать значение перед повторением:
Бесконечная рекурсия также может быть вызвана самореферентными структурами данных, такими как срез, который содержит себя как элемент, если этот тип имеет метод String. Однако такие патологии встречаются редко, и упаковка не защищает от них.
При печати структуры fmt не может и поэтому не вызывает методы форматирования, такие как Error или String, для неэкспортированных полей.
Явные индексы аргументов ¶
В Printf, Sprintf и Fprintf по умолчанию каждая команда форматирования форматирует последовательные аргументы, переданные в вызове. Однако обозначение [n] непосредственно перед глаголом указывает, что вместо этого должен форматироваться n-й аргумент с одним индексом. То же самое обозначение перед '*' для ширины или точности выбирает индекс аргумента, содержащий значение. После обработки выражения в квадратных скобках [n] последующие глаголы будут использовать аргументы n+1, n+2 и т. д., если не указано иное.
получит "22 11", а
получит "12.00". Поскольку явный индекс влияет на последующие команды, эту нотацию можно использовать для многократного вывода одних и тех же значений путем сброса индекса для первого повторяющегося аргумента:
получит "16 17 0x10 0x11".
Ошибки формата ¶
Если для команды указан недопустимый аргумент, например, предоставление строки для %d, сгенерированная строка будет содержать описание проблемы, как в следующих примерах:
Все ошибки начинаются со строки "%!" за которым иногда следует один символ (глагол) и заканчивается описанием в скобках.
Если метод Error или String вызывает панику при вызове подпрограммой печати, пакет fmt переформатирует сообщение об ошибке из паники, украсив его указанием на то, что оно пришло через пакет fmt. Например, если метод String вызывает panic("bad"), результирующее отформатированное сообщение будет выглядеть так:
%!s просто показывает команду печати, используемую в момент возникновения сбоя. Однако, если паника вызвана нулевым приемником для метода Error или String, на выходе будет неукрашенная строка, " ".
Сканирование ¶
Аналогичный набор функций сканирует форматированный текст, чтобы получить значения. Scan, Scanf и Scanln читаются из os.Stdin; Fscan, Fscanf и Fscanln читают из указанного io.Reader; Sscan, Sscanf и Sscanln считывают из строки аргумента.
Scan, Fscan, Sscan интерпретируют новые строки во входных данных как пробелы.
Scanln, Fscanln и Sscanln останавливают сканирование на новой строке и требуют, чтобы за элементами шла новая строка или конец файла.
Scanf, Fscanf и Sscanf анализируют аргументы в соответствии со строкой формата, аналогичной Printf. В последующем тексте «пробел» означает любой пробельный символ Unicode, кроме символа новой строки.
В строке формата глагол, представленный символом %, потребляет и анализирует ввод; эти глаголы описаны более подробно ниже. Символ, отличный от %, пробела или новой строки в формате, потребляет именно тот входной символ, который должен присутствовать. Новая строка с нулем или более пробелов перед ней в строке формата потребляет ноль или более пробелов во входных данных, за которыми следует одна новая строка или конец ввода. Пробел, следующий за новой строкой в строке формата, занимает ноль или более пробелов во входных данных. В противном случае любой запуск одного или нескольких пробелов в строке формата требует максимально возможного количества пробелов во входных данных. Если ряд пробелов в строке формата не появляется рядом с новой строкой, при выполнении должен быть использован хотя бы один пробел из ввода или найден конец ввода.
Обработка пробелов и новых строк отличается от обработки семейства scanf языка C: в C символы новой строки обрабатываются как любые другие пробелы, и это никогда не является ошибкой, когда набор пробелов в строке формата не находит пробелов для использования в строке. ввод.
Ввод, обрабатываемый глаголами, неявно разделен пробелами: реализация каждого глагола, кроме %c, начинается с отбрасывания начальных пробелов из оставшегося ввода, а глагол %s (и чтение %v в строку) перестает потреблять ввод в момент первый пробел или символ новой строки.
Знакомые базовые префиксы 0b (двоичные), 0o и 0 (восьмеричные) и 0x (шестнадцатеричные) принимаются при сканировании целых чисел без формата или с глаголом %v, как и знаки подчеркивания, разделяющие цифры. р>
Ширина интерпретируется во входном тексте, но нет синтаксиса для точного сканирования (нет %5.2f, только %5f). Если задана ширина, она применяется после обрезания начальных пробелов и указывает максимальное количество рун, которое нужно прочитать, чтобы выполнить глагол. Например,
установит для s значение "12345", а для i значение 67, а
установит для s значение "12", а для i значение 34.
Во всех функциях сканирования возврат каретки, за которым сразу следует новая строка, обрабатывается как простая новая строка (\r\n означает то же, что и \n).
Во всех функциях сканирования, если операнд реализует метод Scan (то есть реализует интерфейс сканера), этот метод будет использоваться для сканирования текста для этого операнда.Кроме того, если число просканированных аргументов меньше числа предоставленных аргументов, возвращается ошибка.
Все сканируемые аргументы должны быть либо указателями на базовые типы, либо реализациями интерфейса сканера.
Подобно Scanf и Fscanf, Sscanf не должен потреблять весь ввод. Невозможно восстановить, какая часть входной строки использовалась Sscanf.
Примечание. Fscan и другие программы могут считывать один символ (руну) после возвращаемого ими ввода, а это означает, что цикл, вызывающий процедуру сканирования, может пропустить часть ввода. Обычно это проблема только в том случае, если между входными значениями нет пробела. Если средство чтения, предоставленное Fscan, реализует ReadRune, этот метод будет использоваться для чтения символов. Если ридер также реализует UnreadRune, этот метод будет использоваться для сохранения символа, и последующие вызовы не будут терять данные. Чтобы присоединить методы ReadRune и UnreadRune к считывателю без такой возможности, используйте bufio.NewReader.
Эти примеры демонстрируют основы печати с использованием строки формата. Printf, Sprintf и Fprintf принимают строку формата, указывающую, как форматировать последующие аргументы. Например, %d (мы называем это «глаголом») говорит вывести соответствующий аргумент, который должен быть целым числом (или чем-то, содержащим целое число, например, часть целых чисел) в десятичном виде. Глагол %v («v» вместо «значение») всегда форматирует аргумент в его форме по умолчанию, именно так, как это показали бы Print или Println. Специальная команда %T («T» для «Типа») печатает тип аргумента, а не его значение. Примеры не являются исчерпывающими; подробности см. в комментарии к пакету.
Выполнить общий формат
Print, Println и Printf размещают свои аргументы по-разному. В этом примере мы можем сравнить их поведение. Println всегда добавляет пробелы между печатаемыми элементами, в то время как Print добавляет пробелы только между нестроковыми аргументами, а Printf делает именно то, что ему говорят. Sprint, Sprintln, Sprintf, Fprint, Fprintln и Fprintf ведут себя так же, как их соответствующие функции Print, Println и Printf, показанные здесь.
Чтобы напечатать строку Hello world, используйте функцию print() следующим образом:
— это правильный способ печати строки. Примечание; однако это Python 2.X, вы также можете написать:
6.2. напечатать пустую строку(и)¶
Выведем 5 пустых строк. Вы можете наивно напечатать:
6.3. Печатать объект без символа новой строки в конце¶
По умолчанию функция печати добавляет завершающую строку. Чтобы предотвратить такое поведение, добавьте запятую после оператора:
6.4. Форматированные строки¶
Специальный оператор % позволяет создавать форматированный вывод. Он принимает два операнда: форматированную строку и значение. Значение может быть одиночным значением, кортежем значений или словарем значений. Например:
Отформатированная строка содержит спецификаторы преобразования, в которых также используются специальные символы %s. Этот спецификатор преобразования сообщает Python, как преобразовать значение. Здесь %s означает преобразование значения в строку. На самом деле, вы могли бы даже ввести:
потому что правильный операнд (учитывая спецификаторы преобразования) должен быть преобразован с помощью str() .
Чтобы быть более общим, вы можете включить значение в кортеж:
и вывести 2 значения:
Спецификаторы преобразования также могут преобразовывать значения в числа с плавающей запятой, целые числа и т. д. См. раздел Типы конверсий. Спецификаторы преобразования можно настроить, и в следующих разделах показано, как это сделать. Во-первых, давайте посмотрим на специальные символы.
6.5. Специальные символы¶
Чтобы избежать знака %, просто удвойте его:
Другие специальные символы, аналогичные некоторым другим языкам, перечислены в следующей таблице:
символ | десятичный | описание |
---|---|---|
\ | оператор продолжается на следующей строке | |
\ | 92 | обратная косая черта |
\' | 39 | Одинарная кавычка |
\” | 34 | Двойная кавычка |
\a | 7 | Колокольчик |
\b | 8 | Backspace |
\f | Formfeed | |
\n | 10 | новая строка |
\r | 13 | возврат каретки |
\t | 9 | табуляция |
\v | 11 | вертикальная табуляция |
нулевое значение | ||
\ooo | восьмеричное значение o в (0..7) td> | |
\xhh | шестнадцатеричное значение (0..9, a..f; A..F) | |
\uxxxx | Значение символа Unicode |
6.6. Подробнее о спецификаторах преобразования¶
Общий синтаксис спецификатора преобразования:
Давайте подробно рассмотрим каждый вариант. Начнем со значения типа.
6.6.1. Типы конверсии¶
Мы уже видели один тип: строковый тип %s. В следующей таблице приведены все доступные типы:
символ | описание |
---|---|
Преобразует в один символ | |
d,i | Преобразует в десятичное целое число со знаком или длинное целое td> |
u | Преобразует в десятичное целое число без знака |
e,E | Преобразует в число с плавающей запятой в экспоненциальном представлении |
f | Преобразует в число с плавающей запятой в фиксированно-десятичном представлении |
g | Преобразует значение короче %f и %e |
G | Преобразует значение короче из %f и %E |
o | Преобразует в восьмеричное целое число без знака |
r | строка, сгенерированная функцией repr() |
s | Преобразуется в строку с помощью функции str() | < /tr>
x,X | Преобразует в шестнадцатеричное целое число без знака |
6.6.2. Форматирование строки со словарем¶
Теперь давайте посмотрим на параметр key. Этот ключ относится к ключам, используемым в словарях. Это работает следующим образом:
6.6.3. Флаги¶
Второй тип опций — это флаги:
6.6.4. Параметр ширина¶
Параметр width представляет собой положительное целое число, указывающее минимальную ширину поля. Если преобразованное значение короче width, пробелы добавляются слева или справа (в зависимости от флагов):
6.6.5. Определенное количество цифр с опцией prec¶
6.6.6. Динамическое форматирование¶
Иногда вы хотите отформатировать строку, но не знаете ее размер. В таком случае вы можете использовать динамическое форматирование, используя символ * следующим образом:
6.7. Подробнее о методе форматирования строки¶
6.7.1. Поле замены <>¶
Давайте рассмотрим этот пример:
Кнопка <> — это заменяющее поле, обозначенное фигурными скобками и именем (или индексом). Если указан индекс, это индекс списка аргументов, предоставленных в вызове формата. В приведенном выше примере мы могли бы написать (с тем же результатом):
Именем мы добавляем надежности:
Мы можем комбинировать имя и индексы:
Обратите внимание, что аргумент index должен указываться перед аргументом name. Это не работает:
Еще один удобный способ — предоставить словарь:
Вы даже можете использовать атрибут из класса, импортировать:
Таким образом, вы можете использовать позиционные аргументы в сочетании с переменной, списком, словарем, атрибутом):
Поле замены можно дополнительно изменить, используя следующий синтаксис:
6.7.2. конверсия¶
Давайте сначала объясним разницу между строковой формой и репрезентативной формой. Рассмотрим класс Decimal из модуля decimal. Когда вы вводите имя переменной/экземпляра, он печатает репрезентативную форму экземпляра:
На самом деле команда печати печатает что-то другое:
Обратите внимание на отсутствие кавычек. Здесь поведение печати определяется специальным методом __str__. Форма представления удобна, если вы хотите воссоздать экземпляр. Строковая форма удобна для человека.
где имя — это переменная в списке, а оценка — целое число. Это Python 3.3, если это вообще поможет.
13 ответов 13
Есть много способов сделать это. Чтобы исправить текущий код с помощью %-formatting, вам нужно передать кортеж:
Передайте как кортеж:
Кортеж с одним элементом выглядит как ('this',) .
Вот некоторые другие распространенные способы сделать это:
Передайте как словарь:
Есть также форматирование строк в новом стиле, которое может быть немного легче читать:
Используйте форматирование строк в новом стиле:
Используйте форматирование строки в новом стиле с числами (полезно для изменения порядка или печати одного и того же несколько раз):
Используйте форматирование строк в новом стиле с явными именами:
Самые четкие два, на мой взгляд:
Просто передайте значения в качестве параметров:
Если вы не хотите, чтобы пробелы вставлялись автоматически при печати в приведенном выше примере, измените параметр sep:
Если вы используете Python 2, вы не сможете использовать последние два, потому что print не является функцией в Python 2. Однако вы можете импортировать это поведение из __future__ :
Используйте новое форматирование f-строки в Python 3.6:
конечно, всегда есть старый метод отклонения: print("Общая оценка для "+str(name)"+ равна "+str(score))
Мой +1. В наши дни я предпочитаю .format() как более читаемый, чем старый % (кортеж) - хотя я видел тесты, которые показывают, что интерполяция % работает быстрее. Печать('xxx', a, 'yyy', b) также подходит для простых случаев. Я рекомендую также изучить .format_map() со словарем в качестве аргумента и с 'ssss
К вашему сведению, начиная с Python 3.6, мы получаем f-строки, так что теперь вы также можете выполнять print(f"Общая оценка для is ") без явных вызовов функций (пока имя и оценка явно входят в область действия).
Читайте также: