TypeError в Python, который говорит, что объект dict не вызывается

Я новичок в Python. Я получаю ошибку TypeError:dict object is not callable, Я нигде не использовал словарь в моем коде.

def new_map(*arg1, **func): 
    result = []
    for x in arg1:
        result.append(func(x))
    return result

Я попытался вызвать эту функцию следующим образом:

new_map([-10], func=abs)

Но когда я запускаю его, я получаю вышеуказанную ошибку.

5 ответов

Решение

Похоже, вы используете произвольные аргументы, когда они не требуются. Вы можете просто определить свою функцию с аргументами arg1 а также func:

def new_map(arg1, func):
    result = []
    for x in arg1:
        result.append(func(x))
    return result

res = new_map([-10], abs)

print(res)

[10]

Для подробного руководства о том, как использовать * или же ** операторы с аргументами функции смотрите в следующих постах:

** Префикс говорит, что все ключевые аргументы вашей функции должны быть сгруппированы в dict называется func, Так func это dict а также func(x) это попытка вызвать dict и терпит неудачу с данной ошибкой.

Или простое понимание списка:

def new_map(arg1, func):
    return [func(i) for i in arg1]

out = new_map([-10], func=abs)
print(out)

Выход:

[10]

func это dictionary в вашей программе. Если вы хотите получить доступ к его значению, вы должны использовать [] не (), Подобно:

def new_map(*arg1, **func): 
    result = []
    for x in arg1:
        result.append(func[x]) #use [], not ()
    return result

Если func это function в свою программу вы должны написать:

def new_map(*arg1, func): 
    result = []
    for x in arg1:
        result.append(func(x)) #use [], not ()
    return result

Вы использовали словарь по ошибке. Когда вы определили new_map(*arg1, **func), func переменная собирает именованный параметр, указанный во время вызова функции. Если func должна быть функцией, поставьте ее в качестве первого аргумента, без * или же **

Другие вопросы по тегам