Это происходит потому, что lists_of_filter
повторяется только вне цикла. Вне цикла у вас есть exclude_label == 'something'
, поэтому вы получаете неожиданные результаты. Чтобы проверить это, вы можете поместить строку exclude_label = 'exclude'
:
lists_to_filter = [
['a', 'exclude'],
['b']
]
for exclude_label in ['exclude', 'something']:
lists_to_filter = (labels_list for labels_list in lists_to_filter if exclude_label not in labels_list)
exclude_label = 'exclude'
lists_to_filter = list(lists_to_filter)
print(lists_to_filter) # [['b']]
Документ для выражений генератора говорит, что « Последующий для предложений и любое условие фильтра в крайнем левом для предложения не может быть оценена в пределах объема, так как они могут зависеть от значений, полученных из самой левой итерации. ". В вашем случае условие фильтра if exclude_label ...
зависит от значения, полученного из цикла for exclude_label in ...
.
Одним из основных парней позади Suhosin является Stefan Esser. Stefan, кажется, имел на продолжающемся разногласии с базовыми разработчиками PHP относительно безопасности за последние несколько лет. Он был также одним из парней позади месяца ошибок PHP, который был предназначен для привлечения внимания к (по мнению Stefan) удручающее состояние базовой безопасности PHP.
Учитывая, что парни Suhosin решили пойти своим собственным путем и работой вне проекта PHP, я могу предположить что:
Некоторые дистрибутивы Linux, такие как Debian (Травление и Lenny), Ubuntu и Arch включают патч Suhosin в свой пакет PHP, таким образом, в тех системах Вы будете часто находить, что это включено по умолчанию. Red Hat получил дистрибутивы (Red Hat Enterprise, CentOS, Fedora, и т.д.) не включают Suhosin в их пакеты PHP.
Примечание: У меня нет связи с Ядром PHP devs, или Suhosin, но разумное предположение на основе некоторых личностей включил.
Я предположил бы, что главные причины для php команды не включать Suhosin:
Интересно они внесли свой код назад в основной php проект?
Это обычно, как новый код интегрируется в проекты с открытым исходным кодом.