Две проблемы.Первый более тонкий, поэтому я объясню это в первую очередь.
Проблема в том, что 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
>>>
Как видите.В первом случае переменная a
была удалена из текущего пространства имен.Нет способа ссылаться на объект, на который он указывал больше (при условии, что больше ничего не указывает на то же самое)
Во втором случае вы не удаляете a
из пространства имен.Вы удаляете привязку x
в пространстве имен функции, в результате чего вы больше не сможете использовать x
в качестве значения в функции (т. Е. Это неопределенная переменная).
Вторая проблема - это SyntaxError
, которая проще.Функции Python lambda
могут содержать только выражения, но не операторы.del
не в выражении (то есть, не в вызове функции) - это утверждение (del_stmt
), и поэтому оно не может появляться в теле лямбды.Вы бы увидели ту же проблему, если бы попытались поместить print
в тело лямбды.
>>> lambda x: print x
File "<stdin>", line 1
lambda x: print x
^
SyntaxError: invalid syntax
Это также объясняет причину сбоя x=del(a)
.Синтаксис оператора недействителен.Это не функция, которая может быть вызвана.