TypeError в python, который говорит, что объект dict не вызывается - PullRequest
0 голосов
/ 29 июня 2018

Я новичок в 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 ]

0 голосов
/ 29 июня 2018

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

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

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

Выход:

[10]
0 голосов
/ 29 июня 2018

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
0 голосов
/ 29 июня 2018

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

0 голосов
/ 29 июня 2018

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

0 голосов
/ 29 июня 2018

Похоже, вы используете произвольные аргументы, когда они не обязательны. Вы можете просто определить свою функцию с аргументами 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]

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

...