Python del()内置can';不能在作业中使用?

Python del()内置can';不能在作业中使用?,python,built-in,Python,Built In,当我试图在lambda中使用del将线程列表精简为仅运行的线程时,我注意到了一个问题: map(lambda x: del(x) if not x.isAlive() else x, self.threads) 忽略一秒钟,这没有任何作用,我只是在玩弄map、reduce和lambda 此操作失败,del(x)处出现语法错误。由于有些混乱,我认为问题在于del()不返回值。例如,此操作失败并出现相同的错误: b = 5 x = del(b) 然而,这并不意味着: def rmThis(x):

当我试图在lambda中使用del将线程列表精简为仅运行的线程时,我注意到了一个问题:

map(lambda x: del(x) if not x.isAlive() else x, self.threads)
忽略一秒钟,这没有任何作用,我只是在玩弄map、reduce和lambda

此操作失败,del(x)处出现语法错误。由于有些混乱,我认为问题在于del()不返回值。例如,此操作失败并出现相同的错误:

b = 5
x = del(b)
然而,这并不意味着:

def rmThis(x): del(x)
这意味着我正在使用以下解决方法:

map(lambda x: rmThis(x) if not x.isAlive() else x, self.threads)
那么,限制是否仅仅因为del()不返回值?为什么不呢

我使用的是python 2.6.2

它的局限性在于此,而不是一个表达式。它不“返回值”,因为Python中的语句不返回值

lambda
表单只允许您提及表达式(因为在表达式之前有一个隐式的
返回
),而
def
表单允许在一行上指定一个语句函数(正如您使用
rmThis
所做的那样)

通常使用
del
时不带括号,如下所示:

del x

但是,允许在参数周围加括号,如
del(x)
,但这并不意味着它是一个函数调用。

有两个问题。第一个更微妙,所以我先解释一下

问题是del删除了变量绑定。传递一个值不会达到你的目的

这是一个例子

>>> a = 5
>>> del(a)
>>> a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>> def mydel(x): del(x)
... 
>>> a = 5
>>> mydel(a)
>>> a
5
>>> 

这也解释了为什么
x=del(a)
失败。语句语法无效。它不是一个可以调用的函数

是否需要显式调用线程对象上的
del
?如果您可以将其留给引用计数器或垃圾收集器,则可以改为编写TIH:
[thread for thread in self.threads If thread.isAlive()]
。即使这样做有效,也不会起作用:)在迭代iterable时不能从iterable中删除元素。
>>> lambda x: print x
  File "<stdin>", line 1
    lambda x: print x
                  ^
SyntaxError: invalid syntax