2017-02-17 2 views
0

В моем текущем коде, у меня есть следующая строка, где to_remove представляет собой наборИспользование списка понимание для повторного вызова функции в Python

[to_remove.update(b) for b in some_set if all(a <= b for a in some_dict)] 

Хотя это работает, это беспокоит меня немного, так как это создает список None который не используется. Считается ли это не стандартным? Есть ли лучший способ сделать это?

Update:

Поскольку было указано, что список понимание исключительно побочный эффект не является хорошим, я изменил мой код

to_remove.update(itertools.chain.from_iterable(
    b for b in some_set if all(a <= b for a in some_dict)) 
+0

Побочные эффекты внутри списка понимания являются необычный и неожиданный, что делает их очень плохой идеей. Следует избегать всякого, что смущает людей и имеет более простую реализацию. –

+2

Обычный для цикла и оператора if? –

+0

Вы должны сделать это так: 'to_remove.update ([b для b в some_set if all (a <= b для a в some_dict)]) – Elmex80s

ответ

2

Это не стандарт и не рекомендуется использовать если его вывод не назначен переменной. Статический анализатор, такой как pylint, даже отметит его.

Используйте обычный цикл вместо:

for b in some_set: 
    if all(a <= b for a in some_dict): 
     to_remove.update(b) 

В вашем конкретном случае, поскольку to_remove представляет собой набор, нижеследующее может или не может работать правильно:

to_remove.update(b for b in some_set if all(a <= b for a in some_dict)) 
+0

'to_remove.update (b для b в some_set, если все (a <= b для a в some_dict))' не дает того же результата – nos

Смежные вопросы