Ein Memo, wenn Sie sich Sorgen über den Betrieb des integrierten Funktionsfilters machen
Ich dachte, dass Filter eine Hochhausfunktion ist und eine Funktion als Argument verwendet, aber anscheinend kann er None als Argument verwenden.
>>> a = [0,1,1.1,'a',None,False]
>>> b = filter(None,a)
>>> list(b)
[1, 1.1, 'a']
Was die Operation betrifft, so scheinen 0, None und False, die in bool False sind, entfernt worden zu sein.
>>> b = filter(lambda x:bool(x),a)
>>> list(b)
[1, 1.1, 'a']
Mit Hilfe der Hilfe bestätigt
help(filter)
class filter(object)
| filter(function or None, iterable) --> filter object
|
| Return an iterator yielding those items of iterable for which function(item)
| is true. If function is None, return the items that are true.
|
| Methods defined here:
|
| __getattribute__(self, name, /)
| Return getattr(self, name).
|
| __iter__(self, /)
| Implement iter(self).
|
| __next__(self, /)
| Implement next(self).
|
| __reduce__(...)
| Return state information for pickling.
|
| ----------------------------------------------------------------------
| Static methods defined here:
|
| __new__(*args, **kwargs) from builtins.type
| Create and return a new object. See help(type) for accurate signature.
Wenn None zum Funktionsteil kommt, scheint es sich wie ein Filter zu verhalten (Lambda x: x, Liste).
Als ich versuchte, es aus dem Quellcode zu überprüfen, war es ziemlich schwierig.
Das Überprüfen der Quelle mit inspect kann mit der integrierten Funktion nicht durchgeführt werden.
>>> import inspect
>>> inspect.getsource(filter)
...
TypeError: <class 'filter'> is a built-in class
Ich habe in Githubs Dokumentation nachgesehen, aber die Quelle ist nicht enthalten. Das sollte es sein, die eingebauten Funktionen sind in C geschrieben. Sie können den Quellcode der Filterfunktion ab Python 2 mit builtin_filter in [Mercurial] überprüfen (https://hg.python.org/cpython/file/860e0fd2fee8/Python/bltinmodule.c). Ich frage mich, ob sich dies auch nach Python3 nicht geändert hat ...?
Recommended Posts