Функция reduce
Модуль
Таким образом, в примере выше
#функции #reduce
Модуль
functools
позволяет хорошо раскрыть функциональные возможности Python. Например, в functools
есть интересная функция reduce
, которая позволяет «сжимать» данные, применяя последовательно функцию и запоминая результат.Таким образом, в примере выше
reduce
умножает 1 на 2, затем результат этого умножения на 3 и так далее.#функции #reduce
👍1
Анонимные функции
Анонимные функции являются крайне полезным аспектом, которым либо пренебрегают, либо чрезмерно пользуются. Новичкам они могут показаться сложными, но это совсем не так.
В целом, структура очень простая –
Такие функции чаще всего используются, когда они больше нигде не понадобятся, то есть определять полноценную функцию нет смысла. Типичные примеры использования –
#функции #lambda
Анонимные функции являются крайне полезным аспектом, которым либо пренебрегают, либо чрезмерно пользуются. Новичкам они могут показаться сложными, но это совсем не так.
В целом, структура очень простая –
lambda <arguments>: <expression>
. Сначала пишете ключевое слово lambda
, далее аргументы, двоеточие и какое-то выражение, результат которого автоматически вернется.Такие функции чаще всего используются, когда они больше нигде не понадобятся, то есть определять полноценную функцию нет смысла. Типичные примеры использования –
map
и filter
.#функции #lambda
Одноразовый метод в классе
В случае, если вдруг понадобится в классе функция, которая будет использоваться всего один раз, после чего будет использоваться другая функция, можно воспользоваться приемом на картинке.
Последней строчкой метода
Подобный прием будет полезен в тех случаях, когда при самом первом вызове метода в классе требуются выполнить одноразовые действия, которые в дальнейшем не нужны.
#классы #функции
В случае, если вдруг понадобится в классе функция, которая будет использоваться всего один раз, после чего будет использоваться другая функция, можно воспользоваться приемом на картинке.
Последней строчкой метода
call
является переопределение самого этого метода на другой, а именно normal_call
. Таким образом, изначальный код call
будет исполнен только один раз.Подобный прием будет полезен в тех случаях, когда при самом первом вызове метода в классе требуются выполнить одноразовые действия, которые в дальнейшем не нужны.
#классы #функции
👍2
Функции только с именованными аргументами
Для того чтобы при использовании некоей функции сделать так, чтобы ей можно было бы передавать только именованные аргументы, можно использовать аргумент
Таким образом, если просто передать два аргумента в функцию, то возникнет исключение
Такой прием может быть полезен для того, чтобы улучшить понятность кода. Здесь, что вполне очевидно, можно использовать и позиционные аргументы – в том случае, если поместить их до
#функции
Для того чтобы при использовании некоей функции сделать так, чтобы ей можно было бы передавать только именованные аргументы, можно использовать аргумент
*
перед списком именованных аргументов.Таким образом, если просто передать два аргумента в функцию, то возникнет исключение
TypeError
. Но если передать их как именованные аргументы, то всё будет работать отлично.Такой прием может быть полезен для того, чтобы улучшить понятность кода. Здесь, что вполне очевидно, можно использовать и позиционные аргументы – в том случае, если поместить их до
*
.#функции
👍1
Функции только с позиционными параметрами
Если с помощью
Однако при попытке вызвать функцию и передать туда именованный аргумент, а не позиционный, получим исключение. А если передать аргумент, явно не указывая имя параметра, то все работает.
Такое поведение как раз задает тот слэш. Параметры, записанные до него, можно передать только как позиционные. После него – как угодно, все будет работать стандартно.
#функции
Если с помощью
inspect
посмотреть на то, как объявлена встроенная функция float
, то увидим, что есть входный параметр x
и еще какой-то непонятый слэш. Однако при попытке вызвать функцию и передать туда именованный аргумент, а не позиционный, получим исключение. А если передать аргумент, явно не указывая имя параметра, то все работает.
Такое поведение как раз задает тот слэш. Параметры, записанные до него, можно передать только как позиционные. После него – как угодно, все будет работать стандартно.
#функции
👍2
Атрибуты функций
Сейчас будет шок для новичков, но функции — это обычные объекты, у которых просто реализован метод
И соотвественно у функций, как и у любых других объектов, можно устанавливать атрибуты и даже другие методы. Но сейчас затронем только атрибуты.
Как вариант, в примере я реализовал счетчик вызова функции, но без использования глобальных переменных — всё с помощью атрибута в объекте функции.
Вообще практического применения в продакшне я не припомню, но сам этот факт знать полезно для общего понимания структуры языка и устройства объектов.
#функции #объекты
Сейчас будет шок для новичков, но функции — это обычные объекты, у которых просто реализован метод
__call__
. Именно он и позволяет выполнять синтаксис с вызовом через круглые скобки.И соотвественно у функций, как и у любых других объектов, можно устанавливать атрибуты и даже другие методы. Но сейчас затронем только атрибуты.
Как вариант, в примере я реализовал счетчик вызова функции, но без использования глобальных переменных — всё с помощью атрибута в объекте функции.
Вообще практического применения в продакшне я не припомню, но сам этот факт знать полезно для общего понимания структуры языка и устройства объектов.
#функции #объекты
Параметры *args и **kwargs
Все хоть раз видели такую запись, и сейчас мы узнаем, что это за символы. Сообщу сразу, что
В примере функция принимает обязательный аргумент
Конструкция с
#функции
Все хоть раз видели такую запись, и сейчас мы узнаем, что это за символы. Сообщу сразу, что
args
и kwargs
– общепринятые имена переменных, а разбирать мы будем звездочки перед ними.В примере функция принимает обязательный аргумент
value
, а остальных аргументов она как бы не ожидает. В таком случае *args
упаковывает все не именованные аргументы в кортеж, а **kwargs
– все именованные в словарь.Конструкция с
*args
, **kwargs
получается достаточно полезной, если мы не знаем, кто и в каких целях будет использовать нашу функцию. То есть, мы можем запихнуть в аргументы практически что угодно.#функции
Что такое lambda-функции
Анонимные функции — крайне полезный аспект языка, которым либо пренебрегают, либо чрезмерно пользуются. Начинающим они могут показаться сложными, но это совсем не так.
Структура очень простая —
Такие функции чаще всего используются, когда они больше нигде не понадобятся, то есть определять полноценную функцию нет смысла. Типичные примеры использования —
#функции #lambda
Анонимные функции — крайне полезный аспект языка, которым либо пренебрегают, либо чрезмерно пользуются. Начинающим они могут показаться сложными, но это совсем не так.
Структура очень простая —
lambda <arguments>: <expression>
. Сначала пишете ключевое слово lambda
, далее аргументы через запятую, двоеточие и какое-то выражение, результат которого автоматически вернется.Такие функции чаще всего используются, когда они больше нигде не понадобятся, то есть определять полноценную функцию нет смысла. Типичные примеры использования —
map
и filter
.#функции #lambda
👍6❤2
Словари вместо switch-case
В Python до сих пор нет switch-case конструкций, но иногда встречается одно хитрое решение — использовать словарь, где значениями будут функции.
Для примера напишем словарь, который будет использован для математических операцией. Ключами будут операторы в виде строк, значениями — соответствующие функции.
В этом примере я использовал lambda-функции для упрощения кода, про них можете почитать в предыдущем посте.
Но вместо анонимных функций можно подставить и обычные, предварительно объявив их.
#словари #функции
В Python до сих пор нет switch-case конструкций, но иногда встречается одно хитрое решение — использовать словарь, где значениями будут функции.
Для примера напишем словарь, который будет использован для математических операцией. Ключами будут операторы в виде строк, значениями — соответствующие функции.
В этом примере я использовал lambda-функции для упрощения кода, про них можете почитать в предыдущем посте.
Но вместо анонимных функций можно подставить и обычные, предварительно объявив их.
#словари #функции
👍7
Функция reduce
Модуль
Таким образом, в примере выше
#функции #reduce
Модуль
functools
позволяет хорошо раскрыть функциональные возможности Python. Например, в functools
есть интересная функция reduce
, которая позволяет «сжимать» данные, применяя последовательно функцию и запоминая результат.Таким образом, в примере выше
reduce
умножает 1 на 2, затем результат этого умножения на 3 и так далее.#функции #reduce
👍48🔥5
Одноразовый метод в классе
В случае, если вдруг понадобится в классе функция, которая будет использоваться всего один раз, после чего будет использоваться другая функция, можно воспользоваться приемом на картинке.
Последней строчкой метода
Подобный прием будет полезен в тех случаях, когда при самом первом вызове метода в классе требуются выполнить одноразовые действия, которые в дальнейшем не нужны.
#классы #функции
В случае, если вдруг понадобится в классе функция, которая будет использоваться всего один раз, после чего будет использоваться другая функция, можно воспользоваться приемом на картинке.
Последней строчкой метода
call
является переопределение самого этого метода на другой, а именно normal_call
. Таким образом, изначальный код call
будет исполнен только один раз.Подобный прием будет полезен в тех случаях, когда при самом первом вызове метода в классе требуются выполнить одноразовые действия, которые в дальнейшем не нужны.
#классы #функции
👍45👎6❤1
Функции только с именованными аргументами
Для того чтобы при использовании некоторой функции сделать так, чтобы ей можно было бы передавать только именованные аргументы, можно использовать аргумент
Таким образом, если просто передать два аргумента в функцию, то возникнет исключение
Такой прием может быть полезен для того, чтобы улучшить понятность кода. Здесь, что вполне очевидно, можно использовать и позиционные аргументы – в том случае, если поместить их до
#функции
Для того чтобы при использовании некоторой функции сделать так, чтобы ей можно было бы передавать только именованные аргументы, можно использовать аргумент
*
перед списком именованных аргументов.Таким образом, если просто передать два аргумента в функцию, то возникнет исключение
TypeError
. Но если передать их как именованные аргументы, то всё будет работать отлично.Такой прием может быть полезен для того, чтобы улучшить понятность кода. Здесь, что вполне очевидно, можно использовать и позиционные аргументы – в том случае, если поместить их до
*
.#функции
👍39❤4👎2😱2
Функции только с позиционными параметрами
Если с помощью
Однако при попытке вызвать функцию и передать туда именованный аргумент, а не позиционный, получим исключение. А если передать аргумент, явно не указывая имя параметра, то все работает.
Такое поведение как раз задает тот слэш. Параметры, записанные до него, можно передать только как позиционные. После него – как угодно, все будет работать стандартно.
#функции
Если с помощью
inspect
посмотреть на то, как объявлена встроенная функция float
, то увидим, что есть входный параметр x
и еще какой-то непонятый слэш. Однако при попытке вызвать функцию и передать туда именованный аргумент, а не позиционный, получим исключение. А если передать аргумент, явно не указывая имя параметра, то все работает.
Такое поведение как раз задает тот слэш. Параметры, записанные до него, можно передать только как позиционные. После него – как угодно, все будет работать стандартно.
#функции
👍41
Атрибуты функций
Сейчас будет шок для новичков, но функции — это обычные объекты, у которых просто реализован метод
И соотвественно у функций, как и у любых других объектов, можно устанавливать атрибуты и даже другие методы. Но сейчас затронем только атрибуты.
Как вариант, в примере я реализовал счетчик вызова функции, но без использования глобальных переменных — всё с помощью атрибута в объекте функции.
Вообще практического применения в продакшне я не припомню, но сам этот факт знать полезно для общего понимания структуры языка и устройства объектов.
#функции #объекты
Сейчас будет шок для новичков, но функции — это обычные объекты, у которых просто реализован метод
__call__
. Именно он и позволяет выполнять синтаксис с вызовом через круглые скобки.И соотвественно у функций, как и у любых других объектов, можно устанавливать атрибуты и даже другие методы. Но сейчас затронем только атрибуты.
Как вариант, в примере я реализовал счетчик вызова функции, но без использования глобальных переменных — всё с помощью атрибута в объекте функции.
Вообще практического применения в продакшне я не припомню, но сам этот факт знать полезно для общего понимания структуры языка и устройства объектов.
#функции #объекты
👍47😱10❤2🔥1
Параметры *args и **kwargs
Все хоть раз видели такую запись, и сейчас мы узнаем, что это за символы. Сообщу сразу, что
В примере функция принимает обязательный аргумент
Конструкция с
#функции
Все хоть раз видели такую запись, и сейчас мы узнаем, что это за символы. Сообщу сразу, что
args
и kwargs
– общепринятые имена переменных, а разбирать мы будем звездочки перед ними.В примере функция принимает обязательный аргумент
value
, а остальных аргументов она как бы не ожидает. В таком случае *args
упаковывает все не именованные аргументы в кортеж, а **kwargs
– все именованные в словарь.Конструкция с
*args
, **kwargs
получается достаточно полезной, если мы не знаем, кто и в каких целях будет использовать нашу функцию. То есть, мы можем запихнуть в аргументы практически что угодно.#функции
👍41🔥6