Вычисление значения функции: Python-решения
Основные подходы к вычислению функции
Стандартное определение функции с помощью def
Этот способ является предпочтительным для большинства случаев: функция получает имя, может содержать несколько операторов, документацию и обработку ошибок.
def quadratic(x):
return x**2 + 2*x + 1
value = quadratic(3)
print(value) # 16Python решение примера (решение примера на python)
Как создать однострочную функцию с помощью lambda?
Лямбда-функция позволяет определить безымянную функцию в одной строке. Она полезна для простых выражений, особенно в сочетании с map, filter и сортировкой.
square = lambda x: x ** 2
print(square(5)) # 25Python вычисление значения выражений (вычисление значения выражений в python)
Как вычислить sin, cos и другие элементарные функции?
Модуль math предоставляет тригонометрические, логарифмические и степенные функции. Пример:
import math
def trig_func(x):
return math.sin(x) + math.cos(x)
print(trig_func(math.pi / 4)) # ~1.4142
вычисление функции в python (вычисление значения функции в python)
decimal для высокой точности.Как вычислить функцию по строковому выражению?
Функция eval выполняет строку как код Python. Полезна для динамических вычислений, но опасна при работе с непроверенными данными.
expr = "x**3 + 2*x - 5"
x_val = 3
result = eval(expr, {"x": x_val})
print(result) # 28Python вычисление корня (вычисление квадратного корня в python)
sympy.sympify или ast.literal_eval.Как вычислить факториал с помощью рекурсии?
Рекурсия подходит для функций, определённых через самих себя, например факториал.
def factorial(n):
return 1 if n == 0 else n * factorial(n-1)
print(factorial(5)) # 120Python формула (написание математических формул в python)
sys.setrecursionlimit или использовать итеративный подход.Как ускорить рекурсивное вычисление с кэшированием?
Декоратор lru_cache из functools запоминает результаты предыдущих вызовов, что особенно эффективно для чисел Фибоначчи.
from functools import lru_cache
@lru_cache(maxsize=None)
def fib(n):
if n < 2:
return n
return fib(n-1) + fib(n-2)
print(fib(50)) # 12586269025решение системы уравнений python (решить систему уравнений в python)
Как вычислить функцию для массива значений?
Библиотека numpy позволяет применять операции поэлементно, без явного цикла.
import numpy as np
f = lambda x: np.sin(x) + 0.5*x
x_arr = np.array([0, np.pi/2, np.pi])
y_arr = f(x_arr)
print(y_arr) # [0. 1. 1.57079633]Python вычислить строку (вычисление выражения из строки в python)
Как вычислить значение символьного выражения в точке?
С пакетом sympy можно создать символьное выражение и подставить значение.
import sympy as sp
x = sp.Symbol('x')
expr = x**2 + sp.sin(x)
f = sp.lambdify(x, expr, 'numpy')
print(f(1.0)) # 1.8414709848078965возвести в квадрат python (возведение числа в квадрат в python)
Как применить функцию к списку аргументов?
Функция map и генераторы списков позволяют вычислить функцию для каждого элемента.
def f(x): return x ** 2 - 3
values = [1, 2, 3, 4]
result = list(map(f, values))
print(result) # [-2, 1, 6, 13]
# или list comprehension:
result2 = [f(v) for v in values]
print(result2) # [-2, 1, 6, 13]Расширенные примеры вычисления функций
Пример 1: Функция с проверкой типа и значениями по умолчанию
Этот пример демонстрирует защиту от некорректных аргументов и предоставление стандартного поведения.
def safe_division(a: float, b: float = 1.0) -> float:
if not isinstance(a, (int, float)) or not isinstance(b, (int, float)):
raise TypeError("Аргументы должны быть числами")
if b == 0:
raise ValueError("Деление на ноль")
return a / b
print(safe_division(10, 2)) # 5.0
print(safe_division(10)) # 10.05.0 10.0
Пример 2: Частичное применение с functools.partial
Фиксация одного из параметров функции для создания новой.
from functools import partial
def power(base, exp):
return base ** exp
square = partial(power, exp=2)
cube = partial(power, exp=3)
print(square(4)) # 16
print(cube(2)) # 816 8
Пример 3: Декоратор для логирования вызовов
Декоратор автоматически выводит аргументы и результат функции.
import functools
def log_calls(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
print(f"Вызов {func.__name__} с args={args}, kwargs={kwargs}")
result = func(*args, **kwargs)
print(f"Результат: {result}")
return result
return wrapper
@log_calls
def add(a, b):
return a + b
add(3, 5)Вызов add с args=(3, 5), kwargs={}
Результат: 8Пример 4: Символьное дифференцирование и вычисление с SymPy
Вычисление производной и подстановка значения.
import sympy as sp
x = sp.Symbol('x')
expr = sp.sin(x) * x**2
deriv = sp.diff(expr, x)
print('Производная:', deriv)
f_deriv = sp.lambdify(x, deriv, 'numpy')
print('Значение при x=2:', f_deriv(2))Производная: 2*x*sin(x) + x**2*cos(x) Значение при x=2: 6.250... (зависит от точности)
Пример 5: Поиск корня уравнения с scipy.optimize.fsolve
Нахождение x, при котором f(x)=0.
from scipy.optimize import fsolve
import math
def f(x):
return x**3 - 2*x - 5
root = fsolve(f, 2) # начальное приближение 2
print('Корень:', root[0])Корень: 2.0945514815423265
Пример 6: Использование itertools.starmap для многомерных аргументов
Применение функции к каждой паре из списка кортежей.
from itertools import starmap
def multiply(a, b):
return a * b
pairs = [(2,3), (4,5), (6,7)]
result = list(starmap(multiply, pairs))
print(result) # [6, 20, 42][6, 20, 42]
Пример 7: Безопасное вычисление пользовательского выражения с sympy.sympify
Символьный парсер ограничивает допустимые операции, в отличие от eval.
import sympy as sp
expr_string = "x**2 + 2*x + 1" # получено от пользователя
x = sp.Symbol('x')
try:
expr = sp.sympify(expr_string)
f = sp.lambdify(x, expr, 'numpy')
print(f(3)) # 16
except (sp.SympifyError, TypeError) as e:
print('Некорректное выражение:', e)16