通过刚性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,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中使用任何内置函数/类名作为变量/函数是一种可怕的做法。