Python 为什么类型错误:不可损坏类型:';列表';什么时候调用函数?

Python 为什么类型错误:不可损坏类型:';列表';什么时候调用函数?,python,python-3.x,Python,Python 3.x,产出:55677 为什么打印(测试(a))给我错误?在您的代码中,您正在检查列表a是否在集合b中,这里列表a是一个可变对象,您不能这样做。这就是它抛出错误的原因TypeError:unhabable type:'list'。阅读更多关于 而print(test,a)只是简单地打印test函数对象和a的值 试试下面的代码 a = [5,5,6,7,7,7] b = set(a) def test(lst): if lst in b: return 1 else:

产出:55677


为什么打印(测试(a))给我错误?

在您的代码中,您正在检查列表
a
是否在集合
b
中,这里列表
a
是一个可变对象,您不能这样做。这就是它抛出错误的原因
TypeError:unhabable type:'list'
。阅读更多关于

print(test,a)
只是简单地打印
test
函数对象和
a的值

试试下面的代码

a = [5,5,6,7,7,7]
b = set(a)
def test(lst):
    if lst in b:
        return 1
    else:
        return 0
print(test(a))  #this gives me error list unhashable  
print(test,a)   #how this is working
for i in  filter(test, a):
    print(i,end=" ")

输出

a = [5,5,6,7,7,7]
b = set(a)
for i in filter(lambda x: x in b, a):
    print(i, end=" ")

在您的代码中,您正在检查列表
a
是否在集合
b
中,这里列表
a
是一个可变对象,您不能这样做。这就是它抛出错误的原因
TypeError:unhabable type:'list'
。阅读更多关于

print(test,a)
只是简单地打印
test
函数对象和
a的值

试试下面的代码

a = [5,5,6,7,7,7]
b = set(a)
def test(lst):
    if lst in b:
        return 1
    else:
        return 0
print(test(a))  #this gives me error list unhashable  
print(test,a)   #how this is working
for i in  filter(test, a):
    print(i,end=" ")

输出

a = [5,5,6,7,7,7]
b = set(a)
for i in filter(lambda x: x in b, a):
    print(i, end=" ")
print(test,a)
只需打印
test
内存地址的功能,如
a
列表。这与打印类似(“abcd”,212)
,因此在这个打印中,测试函数不会运行

您的函数正在运行

5 5 6 7 7 7 
您在这里有一些错误

print(test,a)
只是打印
test
内存地址的功能,比如
a
列表。这与打印类似(“abcd”,212)
,因此在这个打印中,测试函数不会运行

您的函数正在运行

5 5 6 7 7 7 

这里有一些错误,让我告诉你为什么打印(测试,a)首先工作

当您在不调用函数的情况下调用
print(func)
时(或者换句话说,在不执行
print(func())
的情况下),您实际要做的是打印functions对象,它恰好返回函数的
str
表示,该函数包含函数在内存中的位置

def func():
返回“你好,世界!”
打印(函数)#>>
打印(func())#>>你好,世界!
打印(func,“a”)#>>a
现在,关于您收到错误的原因
TypeError:unhabable type:“list”
,这是由于
集合的性质和
列表的性质造成的。请注意,下面将重现您的确切错误:

foo=[1,2,3]
集合={4,5}
打印(foo在集合中)
产出:

print(test(a))
产出:

print(test(a))
1
280623165
-5794655848578721369
回溯(最近一次呼叫最后一次):
文件“test.py”,第14行,在
打印(d.\uuuu散列\uuuuu())
TypeError:“非类型”对象不可调用

换句话说,
list
s在Python中不是可散列的类型,因此您无法检查它们是否存在于
set
中,因为
set
将利用对象的
\uuuuuuuuuu()功能来检查它们是否存在于集合中。

那么让我告诉您为什么
打印(测试,a)
首先工作

当您在不调用函数的情况下调用
print(func)
时(或者换句话说,在不执行
print(func())
的情况下),您实际要做的是打印functions对象,它恰好返回函数的
str
表示,该函数包含函数在内存中的位置

def func():
返回“你好,世界!”
打印(函数)#>>
打印(func())#>>你好,世界!
打印(func,“a”)#>>a
现在,关于您收到错误的原因
TypeError:unhabable type:“list”
,这是由于
集合的性质和
列表的性质造成的。请注意,下面将重现您的确切错误:

foo=[1,2,3]
集合={4,5}
打印(foo在集合中)
产出:

print(test(a))
产出:

print(test(a))
1
280623165
-5794655848578721369
回溯(最近一次呼叫最后一次):
文件“test.py”,第14行,在
打印(d.\uuuu散列\uuuuu())
TypeError:“非类型”对象不可调用

换句话说,
list
s在Python中不是可散列类型,因此您无法检查它们是否存在于
set
中,因为
set
将使用
\uuuuuuu散列()
检查对象是否存在于集合中的功能。

请披露输出的功能测试的目的是什么?
b
是一组数字,因此它不能包含
lst
,它是一个列表,而不是一个数字。您的要求/预期输出是什么?我不理解它是如何工作的。我ant要了解函数是如何调用和工作的,请公开输出的功能
测试的目的是什么?
b
是一组数字,因此它不能包含
lst
,它是一个列表,而不是一个数字。您的要求/预期输出是什么?我不了解它是如何工作的。我想了解它是如何工作的函数正在调用和working@paraspatel更新,希望您能理解。@paraspatel阅读此@paraspatel更新,希望您能理解。@paraspatel阅读此,它不是“打印地址”,它正在打印函数对象的字符串表示形式,这是继承自
对象
的默认对象表示形式,该对象恰好包含内存地址,而不是“打印地址”,它正在打印函数对象的字符串表示形式,这是从
对象
继承的默认对象表示形式,它碰巧包含了我现在可以理解的内存地址。请单击所选答案左侧的绿色箭头来标记问题的正确答案。这将允许进行其余操作我现在可以理解了。请单击您选择的答案左侧的绿色箭头,标记您问题的正确答案。这将允许论坛的其他成员知道您的问题已得到回答。:)