#python #dictionary #user-defined-functions
#python #словарь #определяемые пользователем функции
Вопрос:
Моя цель — создать UDF, который выполняет простую арифметику. Я хочу, чтобы функция принимала 2 значения, а затем строковое представление оператора, например ‘mulitiply’, и выполняла оператор от x до y. Это моя первая попытка, извините за беспорядок.
def_myArithmetic(x, y, op):
op={'multiply': *, 'divide': /, 'add': , 'subtract':-}
**some loop**
**return calculation**
что мне удалось до сих пор
import operator
def do_arithmetic(x, y, op):
op={'multiply': operator.multiply,'divide': operator.divide,'add': operator.add ,'subtract': operator.subtract}
for i in range(x,y):
print (x, y)
использование этого блока кода возвращает ошибку при вызове функции.
Я знаю, что этот словарь не работает. И я полагаю, что это связано с наличием нескольких ключей в одной ссылке?
Я считаю, что я где-то рядом с правильными строками, но явно не знаю, как это написать. Было бы очень полезно иметь что-то, на что можно ссылаться, когда я пытаюсь реализовать выбранные мной правила.
Спасибо за ваш отзыв
Комментарии:
1. Используйте
operator
модуль.operator.add
operator.mul
, и т.д.2. могу ли я попросить пример в UDF?
3.
{'multiply': operator.mul, ...}
4. Ваш словарь — правильный подход, вам просто нужно использовать эти функции в качестве значений.
5. это очень полезно, спасибо, Бармар
Ответ №1:
Ваша словарная переменная заменяет op
параметр. Используйте для этого другое имя.
Вам нужно использовать строковый аргумент в качестве ключа для доступа к соответствующему элементу словаря.
Вам нужно вызвать функцию operator, а не просто поместить ее в кортеж с аргументами.
Для цикла нет причин for
.
Нет operator.multiply
, это operator.mul
. Найдите полный список здесь.
def do_arithmetic(x, y, op):
operations = {
'multiply': operator.mul,
'divide': operator.truediv,
'add': operator.add,
'subtract': operator.sub
}
return operations[op](x, y)
Комментарии:
1. Это невероятно полезно, большое спасибо, Бармар !. Я только начал кодировать всего 4 дня назад. Это заставило много читать на практике.