问题描述
代码:
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,5]
unique_list(list1)
当我这样做时..我得到了确切的输出[1,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,5]
unique_list(list)
python引发错误:
TypeError: 'list' object is not callable
是否因为这个原因而不能将刚性关键字用作变量名?或其他原因??
解决方法
这里有您想要做的工作代码
def unique_list(list1):
print("old list",list1)
print('unique list',(list(set(list1))))
list1=[1,1,2,3,4,5]
unique_list(list1)
这是您的代码无法正常工作的原因
让我们看看定义您的函数的代码
def unique_list(list):
#code
list
是一个类名,list()
是python固有的函数;通过将其设为参数和/或变量,您可以覆盖它!
因此,当您致电list(set(list))
时,它基本上是这样说的:parameter(set(parameter))
显然,参数不能同时是一个函数和一个列表;因此没有任何可行的方案。
我建议像这样使用约定名称,如果您不确定如何调用列表:
lst = []
x = []
l = []
您仅需通过type-hinting
def foo(s: str,l: list) -> list:
#do code
return l + list(s)
总而言之……除非您实际上试图覆盖它们,否则在python中使用任何内置函数/类名作为变量/函数是一种可怕的做法。