- как построить общую сумму результатов функции Python
- 3 ответа
- Понимание функции Sum в Python [с примерами]
- Суммирование значений в итерабельной таблице Python
- Использование циклов
- Использование функции reduce
- Использование пользовательской функции
- Синтаксис функции sum в Python
- Суммирование итерационных таблиц с помощью функции Sum
- Список
- Использование необязательного начального значения
- Кортеж
- Набор
- Словарь
- Суммирование ключей
- Суммирование значений
- Использование функции Sum в Python с другими числовыми типами данных
- Комплексные числа
- Числа с плавающей запятой
- Сплющивание с помощью функции Sum
- Сплющивание списка
- Распространенная ошибка: Не используйте функцию sum() Python со строками
- Заключение
как построить общую сумму результатов функции Python
Я хотел бы построить сумму функций в Python. Тем не менее, я не знаю заранее длину суммы. Все функции имеют одинаковый тип, то есть имеют один вход и один и тот же тип вывода. Для двоих что-то вроде этого подойдет
In [180]: def H(f, g): . def _h(x): . return f(x) + g(x) . return _h
Тем не менее, я хотел бы иметь что-то общее в том смысле, что я мог бы написать H(*args) , и оно возвращает мне сумму всех функций в args (также работает только для одной).
Я прав, что это единственный способ построить сумму функций? Я не могу написать что-то вроде h = f+g для двух функций?
3 ответа
Вероятно, легче написать что-то расширяемое. И вы должны использовать встроенную функцию sum для фактического суммирования. Это возвращает генератор, который применяет каждую функцию к входу x:
def map_funcs(x, *funcs): return (f(x) for f in funcs) funcs = lambda x: x + 1, lambda x: x**2 x = 10 print(sum(map_funcs(x, *funcs)))
Если вы хотите, вы также можете сделать это оболочкой, которая возвращает что-то вызываемое, похожее на то, что вы уже получили:
def map_funcs(*funcs): def wrapper(x): return (f(x) for f in funcs) return wrapper funcs = lambda x: x + 1, lambda x: x**2 x = 10 print(sum(map_funcs(*funcs)(x))) # 111
def H(*args): def _h(x): for func in args: z += func(x) return z return _h
Просто обведите функциональные аргументы и суммируйте их. Я думаю, просто? Я надеюсь, что это помогает!
Да, это возможно. Вы должны использовать встроенную функцию sum() , которая возвращает сумму всех значений в данном списке. Перед этим вам, конечно, нужно вычислить список всех функций, которые запускаются H() , с правильным параметром:
def power_two(x): return x**2 def plus_20(x): return x + 20 def H(*args): def _h(x): _results = [f(x) for f in args] return sum(_results) return _h if __name__ == '__main__': the_func = H(power_two, plus_20) final_result = the_func(2) print("(2^2) + (2+20) = %s" % the_func(2)) print("(3^2) + (3+20) = %s" % the_func(3))
Понимание функции Sum в Python [с примерами]
Узнайте все о функции sum() в Python: от синтаксиса до использования ее с различными итерациями – с полезными примерами кода. При работе с итеративными переменными Python, такими как список чисел, часто требуется найти сумму всех элементов списка. Мы будем сталкиваться с подобными операциями и при работе с другими итерациями, такими как кортежи и множества. Это можно сделать несколькими различными способами, но рекомендуемый Питоном способ – использование встроенной функции sum(). Здесь мы начнем с рассмотрения других подходов, таких как цикл и определение функции. Затем мы перейдем к изучению синтаксиса функции sum() в Python и примеров кода для ее лучшего понимания.
Суммирование значений в итерабельной таблице Python
Рассмотрим следующий список чисел:
Наша цель – найти сумму всех чисел в списке. Мы скоро перейдем к функции Python sum(), но начнем с некоторых других подходов, которые мы можем использовать. К ним относятся:
- Использование простого цикла for
- Использование функции reduce() из модуля functools
- Определение пользовательской функции
Использование циклов
Чтобы найти сумму всех элементов списка, мы можем использовать цикл for следующим образом:
- Инициализируйте переменную total нулем.
- Пройдитесь по списку nums и получите доступ к каждому числу.
- Добавьте число к сумме.
>>> nums = [2,8,5,3,11,7,9] >>> total = 0 >>> for num in nums: . total += num . >>> total 45
Использование функции reduce
Другой подход к суммированию итерабельных таблиц – использование функции reduce(). Функция reduce, встроенная в модуль Python functools, принимает функцию и итерируемое число. И уменьшает итерируемое число, последовательно применяя функцию к элементам итерируемого числа. Здесь мы используем лямбда-функцию для определения сложения двух чисел и передаем список nums в качестве итерабельной функции.
>>> nums = [2,8,5,3,11,7,9] >>> from functools import reduce >>> total = reduce(lambda n1, n2: n1 + n2, nums) >>> total 45
Функция reduce() работает путем последовательного сложения двух чисел – слева направо – до тех пор, пока они не сведутся к одному значению суммы:
Использование пользовательской функции
Для этого мы также можем определить пользовательскую функцию. Здесь мы определяем функцию sum_list, которая:
В теле функции используется конструкция цикла, которую мы рассматривали ранее. Но определение функции дает нам возможность повторного использования.
>>> def sum_list(some_list): . total = 0 . for num in some_list: . total += num . return total .
Вызов функции sum_list() с числами в качестве аргументов возвращает сумму 45:
>>> nums = [2,8,5,3,11,7,9] >>> total = sum_list(nums) >>> total 45
Далее давайте познакомимся со встроенной функцией sum(). Она не только лаконична, но и надежна, поскольку хорошо работает с несколькими итерациями и типами данных.
Синтаксис функции sum в Python
Синтаксис для использования функции sum() следующий:
- iterable является обязательным аргументом. Это может быть любой итератор, для которого допустима операция суммирования, например, список или кортежи чисел. Вызов функции sum() со строками Python вызывает исключение TypeError (подробнее об этом позже).
- start – необязательный аргумент. Часто это числовое значение, которое добавляется к вычисленной сумме. Это может быть полезно, когда нужно добавить к результату постоянное значение.
Теперь, когда мы изучили синтаксис функции Python sum(), давайте используем ее для суммирования итераций.
Суммирование итерационных таблиц с помощью функции Sum
Список
Найдем сумму чисел в списке nums с помощью функции sum():
>>> nums = [2,8,5,3,11,7,9] >>> sum_1 = sum(nums) >>> sum_1 45
Использование необязательного начального значения
Чтобы добавить постоянное значение к сумме, мы можем использовать функцию sum() с необязательным начальным значением. Здесь мы передаем начальное значение 100 в качестве позиционного аргумента:
>>> sum_start = sum(nums,100) >>> sum_start 145
Начальное значение также может быть указано в качестве аргумента ключевого слова:
>>> sum_start = sum(nums,start=10) >>> sum_start 55
Кортеж
Функция sum() также работает с кортежами. Мы создаем кортеж nums_tuple путем приведения списка nums к кортежу:
>>> nums_tuple = tuple(nums) >>> nums_tuple (2, 8, 5, 3, 11, 7, 9)
>>> sum_2 = sum(nums_tuple) >>> sum_2 45
Набор
Мы также можем использовать функцию sum() с набором чисел:
>>> nums_set = set(nums) >>> nums_set
Здесь мы приводим список nums к множеству Python и вычисляем сумму элементов в nums_set.
>>> sum_3 = sum(nums_set) >>> sum_3 45
Словарь
Рассмотрим следующий словарь student_dict с числовыми ключами. Обратите внимание, что происходит, когда вы вызываете функцию sum() с этим словарем в качестве аргумента.
>>> students_dict = >>> sum_4 = sum(students_dict) >>> sum_4 6
Функция sum() по умолчанию возвращает сумму ключей.
Суммирование ключей
Мы знаем, что по умолчанию суммируются ключи словаря. Однако вы можете сделать это более явным, используя метод словаря keys() для доступа к ключам. А затем передать список ключей в функцию sum():
>>> sum_keys = sum(students_dict.keys()) >>> sum_keys 6
Суммирование значений
Если вы хотите просуммировать значения словаря, обратитесь к ним, вызвав метод values() объекта словаря:
>>> sum_vals = sum(students_dict.values()) >>> sum_vals 345
Использование функции Sum в Python с другими числовыми типами данных
До сих пор мы видели, как использовать функцию sum() с итерациями целых чисел. Теперь давайте рассмотрим несколько примеров с другими числовыми типами данных.
Комплексные числа
Функция sum() также может быть использована для суммирования комплексных чисел. В этом примере nums_c – это список комплексных чисел:
>>> nums_c = [3 + 4j, 1 + 2j] >>> sum_c = sum(nums_c) >>> sum_c (4+6j)
Числа с плавающей запятой
Здесь мы используем функцию sum() для суммирования списка чисел с плавающей точкой nums_f:
>>> nums_f = [1.8,2.5,3.6,7.2] >>> sum_f = sum(nums_f) >>> sum_f 15.100000000000001
Для повышения точности результата сложения чисел с плавающей точкой можно использовать функцию fsum() из модуля math для суммирования итераций со значениями с плавающей точкой.
Сплющивание с помощью функции Sum
Теперь давайте посмотрим, как функция sum() может быть использована для сплющивания и объединения итераций.
Сплющивание списка
Предположим, у нас есть вложенный список:
Когда мы вызываем функцию sum(), передавая этот вложенный список в качестве аргумента вместе с пустым списком в качестве начального значения:
Мы видим, что вложенный список теперь сплющился в один список чисел. Эквивалентно, если представить список в виде l3 = [l1,l2], функция sum() объединяет два списка l1 и l2, вложенных в список l3. В качестве небольшого упражнения попробуйте использовать функцию sum() для других вложенных итераций.
Распространенная ошибка: Не используйте функцию sum() Python со строками
Поскольку мы видели, что функция sum() может использоваться для сплющивания и объединения списков (и других итераций, например, кортежей), очень соблазнительно подумать, что ее можно использовать и для объединения строк.
Но если вы попытаетесь это сделать, то столкнетесь с ошибкой TypeError:
>>> sum(['a','b','c'],'') Traceback (most recent call last): File "", line 1, in TypeError: sum() can't sum strings [use ''.join(seq) instead]
Поэтому функцию sum() нельзя использовать для суммирования (или конкатенации) строк. Однако, как видно из сообщения об ошибке выше, вы можете использовать метод join() для объединения списка строк в одну строку.
Заключение
В этом уроке мы узнали, как использовать встроенную функцию sum() для нахождения суммы всех элементов итерабельной таблицы. Общий синтаксис для использования функции sum() следующий: sum(iterable, start), где iterable – обязательный аргумент, а start – необязательный аргумент. Затем мы написали несколько примеров, чтобы понять, как использовать функцию sum() с такими итерациями, как списки, кортежи, множества и словари. Позже мы рассмотрели, как функция sum() может использоваться для сглаживания и конкатенации итераций – за исключением строк Python. Надеюсь, вы нашли этот учебник полезным.