Преобразование значения словаря в список не работает в функции

#python #python-3.x #built-in

Вопрос:

Это работает без функции.

 v = list(dic.values()) #  V is a list.
 

Но если я помещу его в функцию, например:

 def test(list):
    result={}
    for i in l:
        result[i]=result.get(i,0) 1
    v = result.values()
    return list(v)
l=[1,2,1,1,3,3,5,5,5,5,5,3,7]
print(test(l))
 

это вызывает ошибку,

 Traceback (most recent call last):
  File `repNone.py`, line 83, in <module>
    print(test(l))
  File "`repNone.py`", line 81, in test
    return list(v)
TypeError: 'list' object is not callable
 

Комментарии:

1. В функции, которую вы затеняете, называя параметр (неиспользуемый, к которому вы обращаетесь l как к глобальному) list .

2. Более конкретно, параметр вашей функции с именем «список» перезаписывает определение фактического типа list .

3. Спасибо @jonrsharpe

Ответ №1:

Всегда не используйте встроенную функцию (например list ) в качестве переменных, Вы используете list ее как переменную

В вашей функции вы передаете l как переменную с именем list , а затем при использовании list(v) вы получили ошибку, потому что вы не можете вызвать переменную.

ты сделал это:

 >>> def test(list):
        ...
...     return list(v) # <- got error because here list is variable and you call this.
 

измените свой код следующим образом:

 >>> def test(lst):
        ...
...     return list(v)
 

Комментарии:

1. Отличный улов! Спасибо. @пользователь1740577