2014-01-02 3 views
0

Ive изучает встроенные функции для python некоторое время, и я пытаюсь получить четкое представление об идеальных ситуациях, чтобы применить их позже. Ive понимал все из них, кроме filter(), аргументы были filter(function, iterable). В docs.python.org указывается:Относительно использования фильтра()

Если функция None, предполагается функция идентификации, то есть все элементы итерации, которые являются ложными, удаляются.

я решил отрабатывать, что, так как я не понял, что функция спрашивает (очевидно, нуждается в функции, однако, какого рода?) Это то, что пробовал:

a=filter(None,[1,0,1,0,1,0]) 
<filter object at 0x02898690> 
callable(a) 
False 

Мой вопрос: Если объект фильтра не является вызываемым, то где он применим?

+2

использовать 'None' вместо' 'none '' – wim

+1

Нет. 'None' является объектом типа' NoneType', тогда как '' none "' является строкой типа 'str'. Оба они отличаются от «Нет». – rlms

+0

, что имеет смысл, я думаю, было довольно глупо думать, что они были равны, очевидно, они arent – TimLayne

ответ

3

Обратите внимание, что:

"none" != None 

Что документация говорит, что если function is None:

filter(None, iterable) 

Это предполагает, что вы хотите только элементы в iterable, для которых bool(item) == True.

Чтобы действительно обеспечить function к filter, он является общим для использования lambda:

filter(lambda x: x > 5, iterable) 

или определить функцию:

def some_func(x): 
    return x > 5 

filter(some_func, iterable) 

Объект filter не отозван, но это итерация :

a = filter(None, iterable) 
for item in a: 
    print item 
+0

спасибо за разъяснение функции – TimLayne

1

Пример использования:

>>> list(filter(None, [0, 1, 2, 0, 3, 4, 5, "", 6, [], 7, 8])) 
[0, 1, 2, 3, 4, 5, 6, 7, 8] 
>>> def is_multiple_of_two_or_three(x): 
     return x % 2 == 0 or x % 3 == 0 
>>> list(filter(is_multiple_of_two_or_three, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])) 
[0, 2, 3, 4, 6, 8, 9] 

С lambda ключевое слово, мы могли бы написать, что, как list(filter(lambda x: x%3 == 0 or x%2 == 0, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])).

В Python 2.x мы получим те же результаты, если удалим вызов list. В Python 3.x мы могли выполнять итерацию через объект фильтра без него с for i in filter(None, something), но я привел вызов list, чтобы показать результаты (строковое представление итерации обычно не так полезно).

Функция filter является одной из частей Python (наряду с map, reduce и functools и itertools модулей), которые являются частью программирования парадигмы functional programming.

0

Функция может быть любой питон функции:

def функция основана:

def func(x): 
    return x != 0 

>>> list(filter(func, [1,0,1,0,1,0])) 
[1, 1, 1] 

lambda:

>>> list(filter(lambda x: x!=0, [1,0,1,0,1,0])) 
[1, 1, 1] 

И в Python3 filter возвращает итератор. Он никогда не возвращает вызываемого.

+1

'filter' никогда не возвращает вызываемого. – wim

+0

@wim Исправлено: –

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