在函数调用结果上调用“del”会导致“SyntaxError:无法删除函数调用”

时间:2012-10-29 20:08:41

标签: python syntax-error function-calls

请考虑以下示例:

random_tile = random.choice(tiles)
del random_tile

首先将列表tiles中的随机元素分配给变量,然后在该变量上调用函数。

然后,如果我们想按如下方式缩短代码:

del random.choice(tiles)

我们会得到SyntaxError: can't delete function call。我试了eval()没有运气。怎么解决这个问题?

修改

我要做的是随机删除tiles列表中的元素。我认为除了使用random.randint()作为索引之外,我发现了一种更紧凑的方式,但我猜不是。

是否有这样做的pythonic /传统方式?

4 个答案:

答案 0 :(得分:5)

del不是函数,而是创建del statements的关键字,例如del var。您不能将它用作函数或函数,它只能应用于变量名,变量名列表或订阅和切片,例如。

del a
del a,b
del l[0]
del l[:]

要删除随机项,您可以尝试

random_tile.remove(random.choice(tiles))

但是这不是删除商品的最佳方式,因为它可能意味着内部搜索商品和商品比较,如果商品不是唯一商品也不会有效,所以最好是随机索引并删除

index = random.randint(0, len(l)-1)
del l[index]

答案 1 :(得分:2)

如果您尝试实际修改tiles列表,则您的第一次尝试也不会这样做。它只是分配给你的变量,然后擦除那个变量。这是因为del适用于变量本身,而不是它所指向的变量。大多数其他函数对某些变量指向的值起作用。因此,除非您确实需要使用del,否则您尝试做的事情会正常。

此外,如果您尝试使用del,我很确定您使用的是错误的。如果你详细说明你想要做什么,我们可以帮助你。

答案 2 :(得分:1)

有很多方法可以从列表中删除随机元素。这是一个。

>>> import random
>>> my_list = [1, 2, 3, 4, 5]
>>> my_list.remove(random.choice(my_list))
>>> my_list
[1, 2, 4, 5]

答案 3 :(得分:0)

给定一个列表tiles,这就可以解决问题:

import random
tiles.remove(random.choice(tiles))