【问题标题】:function calling by rigid python keyword通过严格的python关键字调用函数
【发布时间】:2020-11-10 19:10:11
【问题描述】:

为什么列表对象在函数内部不可调用??

代码:

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

是不是因为这个原因,严格的关键字不能用作变量名??还是其他原因??

【问题讨论】:

  • 不要使用list 作为名称,这样您将覆盖您尝试在函数内部使用的内置函数list()。同样适用于所有内置函数、标准库中的模块等。
  • 不要使用保留关键字,除了list 会起作用
  • 当您调用u_list=(list(sets)) 时,您如何期望Python 知道,在this 行(但不是其他行)上,list 是内置的-in Python 函数而不是同名的函数参数?答案是:不能。

标签: python list object variables keyword


【解决方案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))

显然参数不能同时是函数和列表;所以这在任何情况下都不可行。

如果您不确定如何调用列表,我建议使用这样的约定名称:

lst = []
x = []
l = []

唯一您应该将这些名称中的任何一个单独放入函数定义中的时间是通过type-hinting

def foo(s: str, l: list) -> list:
    #do code
    return l + list(s)

总之...除非您真的试图覆盖它们,否则将 python 中的任何内置函数/类名称用作变量/函数是一种可怕的做法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    相关资源
    最近更新 更多