Python — знак процента
Любая строка может включать в себя произвольное число особых спецификаторов форматирования, состоящих из маркерного символа(обычно % ) и набора параметров преобразования, последним из которых всегда указывается тип форматирования объекта.
Изначально это пошло из стандартной библиотеки языка C, где есть функция printf() , принимающая строку с спецификаторами форматирования первым аргументом, а последующими аргументами ей передаются значения произвольного типа. В качестве вывода, эта функция формирует строку с отформатированными в соответствии со спецификаторами значениями, подставленными на место этих самых спецификаторов.
Pyhon вместо этой функции использует оператор форматирования, тоже обозначенный символом процента( % ) — он разделяет форматную строку и значения, которые с её помощью нужно отформатировать.
Разбирая ваши примеры:
Означает: отформатировать значение переменной foo как строку и вставить её в указанное место.
Здесь же %.2f требует форматирования bar как число с плавающей точкой(f — float), c округлением до 2-х знаков после запятой
Что означает знак процента в Python
Я понимаю, что double == является тестом на равенство, но я не понимаю часть if n % x . Как будто я могу в устной форме пройтись по каждой части и сказать, что утверждение делает для примера. Но я не понимаю, как знак процента падает.
Что if n % x на самом деле говорит?
8 ответов
Оператор модуля; дает остаток от левого значения, деленного на правое значение. Подобно:
3 % 1 будет равен нулю (так как 3 делится равномерно на 1)
3 % 2 будет равен 1 (поскольку деление 3 на 2 приводит к остатку от 1).
Цитата x% n == 0, что означает, что x / n и значение напоминания будут взяты в результате и сравнены с нулем .
4/5 напоминание 1
Он проверяет, является ли модуль делением. Например, в случае, если вы перебираете все числа от 2 до n и проверяете, делится ли n на любое из промежуточных чисел. Проще говоря, вы проверяете, является ли данное число n простым. (Подсказка: вы можете проверить до n / 2).
% Делает две вещи, в зависимости от своих аргументов. В этом случае он действует как оператор по модулю, то есть, когда его аргументы являются числами, он делит первое на второе и возвращает Остаток . 34 % 10 == 4 , поскольку 34, деленное на 10, равно трем, а остаток равен четырем.
Если первый аргумент является строкой, он форматирует ее, используя второй аргумент. Это немного сложно, поэтому я буду ссылаться на документацию, но только в качестве примера:
Тем не менее, форматирование строки дополняется с Python 3.1 в пользу механизма string .format() :
Операции форматирования, описанные здесь, обнаруживают различные причуды, которые приводят к ряду распространенных ошибок (таких как неправильное отображение кортежей и словарей). Использование нового str.format() помогает избежать эти ошибки, а также обеспечивает в целом более мощный, гибкий и расширяемый подход к форматированию текста.
И, к счастью, почти все новые функции также доступны начиная с версии Python 2.6.
Оператор модуля. Остаток при делении двух чисел.
В python 2.6 оператор ‘%’ выполнил модуль. Я не думаю, что они изменили его в 3.0.1
Оператор по модулю сообщает вам остаток от деления двух чисел.
Это оператор в Python, который может означать несколько вещей в зависимости от контекста. Многое из того, что следует, уже упоминалось (или намекалось) в других ответах, но я подумал, что было бы полезно предоставить более обширное резюме.
% для чисел: операция по модулю / остаток / отдых
Знак процента — это оператор в Python. Это описано как:
Таким образом, он дает остаток / отдых, который остается , если вы «этаж разделить «х на у. Обычно (по крайней мере в Python) задается число x и делитель y :
Например, если вы разделите 5 на 2:
В общем случае вы используете операцию по модулю, чтобы проверить, делит ли число поровну на другое число, потому что по числу, кратному числу, это число возвращает 0:
Вот как он используется в вашем примере, он не может быть простым, если он кратен другому числу (кроме себя и одного), вот что он делает:
Если вы чувствуете, что n % x == 0 не очень описательный, вы можете поместить его в другую функцию с более описательным именем:
Вместо is_multiple его также можно назвать evenly_divides или что-то подобное. Вот что здесь тестируется.
Подобно тому, как это часто используется, чтобы определить, является ли число «нечетным» или «четным»:
И в некоторых случаях он также используется для индексации массивов / списков, когда требуется поведение циклического (циклического) перебора, тогда вы просто модулируете «index» на «length массива», чтобы достичь этого:
Обратите внимание, что в стандартной библиотеке есть также функция для этого оператора operator.mod (и псевдоним operator.__mod__ ):
Но есть также расширенное присваивание %= , которое присваивает результат переменной:
% для строк: printf форматирование строк в стиле
Для строк значение совершенно иное, есть один способ (на мой взгляд, самый ограниченный и безобразный) для форматирования строк:
Здесь % в строке представляет собой заполнитель, за которым следует спецификация форматирования. В этом случае я использовал %s , что означает, что он ожидает строку. Затем за строкой следует % , который указывает, что строка с левой стороны будет отформатирована с правой стороны. В этом случае первый %s заменяется первым аргументом this , а второй %s заменяется вторым аргументом ( good ).
Обратите внимание, что есть гораздо лучшие (возможно, основанные на мнении) способы форматирования строк:
% в Jupyter / IPython: магические команды
Для пользователей Jupyter: Магия специфична для ядра IPython и предоставляется им. Доступность магий в ядре — это решение, принимаемое разработчиком ядра для каждого ядра. Для правильной работы Magics должен использовать синтаксический элемент, который недопустим в базовом языке. Например, ядро IPython использует магический элемент % для магии, поскольку % не является допустимым унарным оператором в Python. В то время как элемент синтаксиса имеет значение в других языках.
Это регулярно используется в ноутбуках Jupyter и подобных:
Оператор % для массивов (в экосистеме NumPy / Pandas)
Оператор % по-прежнему является оператором по модулю при применении к этим массивам, но он возвращает массив, содержащий остаток каждого элемента в массиве:
Настройка оператора % для ваших собственных классов
Конечно, вы можете настроить работу ваших собственных классов, когда к ним применяется оператор % . Обычно вы должны использовать его только для реализации операций по модулю! Но это руководство, а не жесткое правило.
Просто чтобы привести простой пример, который показывает, как это работает:
Этот пример не очень полезен, он просто печатает и затем делегирует оператор сохраненному значению, но он показывает, что __mod__ вызывается, когда % применяется к экземпляру:
Обратите внимание, что это также работает для %= без явной необходимости реализовать __imod__ :
Однако вы также можете явно реализовать __imod__ для перезаписи расширенного присваивания:
Что означает знак процента в Python
Я понимаю, что дубль == — это проверка на равенство, но не понимаю его if n % x части. Как будто я могу устно пройтись по каждой части и сказать, что делает утверждение для примера. Но я не понимаю, как попадает знак процента.
Что на if n % x самом деле говорит?
Оператор модуля; дает остаток от левого значения, деленного на правое значение. Нравиться:
3 % 1 равняется нулю (так как 3 делится на 1 без остатка)
3 % 2 будет равняться 1 (так как деление 3 на 2 дает остаток 1).
% Делает две вещи в зависимости от своих аргументов. В этом случае он действует как оператор по модулю, то есть, когда его аргументы являются числами, он делит первое на второе и возвращает остаток . 34 % 10 == 4 так как 34 разделить на 10 равно трем, а остаток — четыре.
Если первый аргумент является строкой, он форматирует ее, используя второй аргумент. Это немного сложно, поэтому я буду ссылаться на документацию , но просто в качестве примера:
Однако в Python 3.1 поведение форматирования строк было дополнено в пользу строкового .format() механизма:
The formatting operations described here exhibit a variety of quirks that lead to a number of common errors (such as failing to display tuples and dictionaries correctly). Using the newer str.format() interface helps avoid these errors, and also provides a generally more powerful, flexible and extensible approach to formatting text.
И, к счастью, почти все новые функции также доступны начиная с python 2.6.
Хотя это немного не по теме, поскольку люди найдут это, выполнив поиск по запросу «знак процента в Python» (как и я), я хотел отметить, что знак% также используется для префикса «волшебной» функции в iPython: https : //ipython.org/ipython-doc/3/interactive/tutorial.html#magic-functions
What does the percentage sign mean?
Это оператор в Python, который может означать несколько вещей в зависимости от контекста. Многое из того, что следует ниже, уже упоминалось (или на что намекалось) в других ответах, но я подумал, что было бы полезно предоставить более подробное резюме.
% для чисел: операция по модулю / остаток / остаток
Знак процента — это оператор в Python . Это описывается как:
Таким образом, он дает вам остаток / остаток, который остается, если вы «пол разделите» x на y. Обычно (по крайней мере, в Python) с учетом числа x и делителя y :
Например, если вы разделите 5 на 2:
Как правило, вы используете операцию по модулю, чтобы проверить, делится ли число равномерно на другое число, потому что кратное числа по модулю это число возвращает 0:
Вот как он используется в вашем примере, он не может быть простым, если он кратен другому числу (кроме себя и единицы), вот что это делает:
Если вам кажется, что n % x == 0 это не очень наглядно, вы можете поместить его в другую функцию с более описательным именем:
Вместо is_multiple него можно было бы также назвать evenly_divides или что-то подобное. Вот что здесь проверено.
Подобно тому, как это часто используется, чтобы определить, является ли число «нечетным» или «четным»:
А в некоторых случаях он также используется для индексации массива / списка, когда требуется циклическое (циклическое) поведение, тогда вы просто модулируете «индекс» на «длину массива», чтобы добиться этого:
Обратите внимание, что для этого оператора также есть функция в стандартной библиотеке operator.mod (и псевдоним operator.__mod__ ):
Но есть также расширенное присваивание, %= которое возвращает результат переменной:
% для строк: форматирование строк в printf стиле
Для строк значение совершенно другое, это один способ (на мой взгляд, самый ограниченный и уродливый) для форматирования строки:
Здесь % в строке представляет собой заполнитель, за которым следует спецификация форматирования. В этом случае я использовал %s это означает, что он ожидает строку. Затем за строкой следует символ, % который указывает, что строка с левой стороны будет отформатирована с помощью правой стороны. В этом случае первый %s заменяется первым аргументом, this а второй %s — вторым аргументом ( good ).
Обратите внимание, что есть гораздо лучшие (возможно, основанные на мнении) способы форматирования строк:
% в Jupyter / IPython: магические команды
To Jupyter users: Magics are specific to and provided by the IPython kernel. Whether magics are available on a kernel is a decision that is made by the kernel developer on a per-kernel basis. To work properly, Magics must use a syntax element which is not valid in the underlying language. For example, the IPython kernel uses the % syntax element for magics as % is not a valid unary operator in Python. While, the syntax element has meaning in other languages.
Это регулярно используется в записных книжках Jupyter и подобных:
% Оператор на массивы (в экосистеме NumPy / панды)
При % применении к этим массивам оператор по-прежнему является оператором по модулю, но он возвращает массив, содержащий остаток от каждого элемента в массиве:
Настройка % оператора для собственных классов
Конечно, вы можете настроить, как работают ваши собственные классы, когда к % ним применяется оператор. Как правило, вы должны использовать его только для реализации операций по модулю! Но это рекомендация, а не жесткое правило.
Просто чтобы предоставить простой пример, показывающий, как это работает:
Этот пример не очень полезен, он просто печатает, а затем делегирует оператор сохраненному значению, но показывает, что он __mod__ вызывается, когда % применяется к экземпляру:
Обратите внимание, что он также работает %= без явной реализации __imod__ :
Однако вы также можете __imod__ явно реализовать перезапись расширенного назначения: