#python #list #object #variables #keyword
#python #Список #объект #переменные #ключевое слово
Вопрос:
почему объект списка не вызывается внутри функции??
код:
def unique_list(list1):
sets=set(list1)
u_list=(list(sets))
print("old list",list1)
print('unique list',u_list)
list1=[1,1,2,3,4,4,5]
unique_list(list1)
когда я это сделал.. Я получил точный результат [1,2,3,4,5]...
, НО
если я использую list вместо list1 или любого другого имени, например, следующего кода:
def unique_list(list):
sets=set(list)
u_list=(list(sets))
print("old list",list)``
print('unique list',u_list)
list=[1,1,2,3,4,4,5]
unique_list(list)
python выдает ошибку:
TypeError: 'list' object is not callable
по этой причине жесткие ключевые слова не должны использоваться в качестве имени переменной?? или по другим причинам??
Комментарии:
1. Не используйте
list
as name, таким образом вы переопределяете встроенную функциюlist()
, которую вы пытаетесь использовать внутри функции. То же самое относится ко всем встроенным функциям, модулям из стандартной библиотеки и т. Д.2. Не используйте зарезервированные ключевые слова, кроме
list
как будет работать3. когда вы вызываете
u_list=(list(sets))
, как вы ожидаете, что Python узнает, что в этой строке (но не в других)list
подразумевается встроенная функция Python, а не аргумент функции с тем же именем? Ответ: это невозможно.
Ответ №1:
Вот рабочий код для того, что вы хотите сделать
def unique_list(list1):
print("old list",list1)
print('unique list',(list(set(list1))))
list1=[1,1,2,3,4,4,5]
unique_list(list1)
вот почему ваш код не работал
давайте посмотрим на код, который определяет вашу функцию
def unique_list(list):
#code
list
это имя класса и list()
функция, которая является родной для python; делая его параметром и / или переменной, вы переопределяете его!
Итак, когда вы вызываете list(set(list))
его, в основном говоря: parameter(set(parameter))
Очевидно, что параметр не может быть функцией и списком одновременно; так что нет никакого сценария, в котором это могло бы сработать.
Я рекомендую использовать условные имена, подобные so, если вы не уверены, как называть список:
lst = []
x = []
l = []
Единственный раз, когда вы должны когда-либо вводить какое-либо из этих имен отдельно в определение функции, — это через type-hinting
def foo(s: str, l: list) -> list:
#do code
return l list(s)
В заключение…ужасная практика использовать любые встроенные имена функций / классов в python в качестве переменных / функций, если вы на самом деле не пытаетесь их переопределить.