Wie funktioniert iter ()?
___ antwort19854410 ___
Von iter
help:
iter (...)
iter (Sammlung) - & gt; Iterator
iter (aufrufbar, Sentinel) - & gt; Iterator
%Vor%
Sie mischen zwei Varianten von iter
function. Der erste akzeptiert Sammlungen, der zweite akzeptiert zwei Argumente - Funktion und Sentinel-Wert. Sie versuchen, den und Sentinel-Wert zu übergeben, was falsch ist.
Kurzer Hinweis: Sie können eine Menge interessanter Informationen von Pythons eingebauter help
-Funktion erhalten. Geben Sie einfach die Python-Konsole help(iter)
ein und Sie erhalten eine Dokumentation darüber.
Warum gibt callabe (list) true zurück, aber callable (l) nicht?
Weil list
eine Funktion ist, die ein neues Listenobjekt zurückgibt. Funktion ist aufrufbar (das ist was Funktion tut - es wird aufgerufen), während Instanz, die diese Funktion zurückgibt - neues Listenobjekt - nicht ist.
___ answer19854647 ___
Wenn %code% mit zwei Argumenten aufgerufen wird, verwendet %code% einen Callable- und einen Sentinel-Wert. Das Verhalten ist so, wie es implementiert wurde:
%Vor%
Was als %code% übergeben wird, muss aufrufbar sein , was bedeutet, dass Sie es einfach wie eine Funktion aufrufen können. Das %code% builtin ist ein %code% -Objekt, mit dem Sie neue Listeninstanzen erstellen können, indem Sie es wie eine Funktion aufrufen:
%Vor%
Die Liste %code% , die Sie übergeben haben, ist eine vorhandene Listeninstanz, die nicht wie eine Funktion verwendet werden kann:
%Vor%
Somit gibt es einen großen und wichtigen Unterschied zwischen dem Objekt %code% type und den Listeninstanzen, der bei Verwendung mit %code% angezeigt wird.
Um eine Liste zu durchlaufen, bis ein Sentinel erreicht ist, können Sie %code% :
verwenden
%Vor%
___ qstntxt ___
Was ist das Problem mit diesem Code
?
%Vor%
Es gibt
zurück
%Vor%
Warum gibt callabe (list) true zurück, aber kann aufgerufen werden (l) nicht?
BEARBEITEN
Welche Methode sollte hier bevorzugt werden?
- manuelle Pausen
- hundert andere
Vielen Dank im Voraus
___ answer19854409 ___
Es hat damit zu tun, dass der zweite Wert übergeben wird (ein sogenannter Sentinel-Wert), dies stellt sicher, dass das Objekt, über das iteriert wird, ein aufrufbares ie ist. eine Funktion.
Also ruft %code% für jede Iteration %code% für das übergebene Objekt auf.
%code% hat zwei verschiedene Verhaltensweisen,
- ohne einen Sentinel-Wert
- mit einem Sentinel-Wert
Das Beispiel in der Dokumentation ist großartig, um es zu verstehen
%Vor%
___ answer19854402 ___
Sehen Sie sich die Dokumentation Ссылка
an
Wenn das zweite Argument in %code% vorhanden ist, wird das erste Argument sehr unterschiedlich behandelt. Es soll eine Funktion sein, die in jedem Schritt aufgerufen wird. Wenn sie Sentinel zurückgibt (d. H. Das zweite Argument), stoppt die Iteration. Zum Beispiel:
%Vor%
BEARBEITEN: Wenn Sie nur eine Liste durchlaufen und anhalten wollen, wenn Sie einen Sentinel sehen, dann empfehle ich einfach folgendes:
%Vor%
___ tag123python ___ Python ist eine dynamische und stark typisierte Programmiersprache, die die Usability betont. Zwei ähnliche, aber größtenteils inkompatible Versionen von Python sind weit verbreitet (2 und 3). Wenn Sie eine versionsspezifische Python-Frage haben, sollten Sie die Tags [python-2.7] oder [python-3.x] zusätzlich zum Tag [python] verwenden. Wenn Sie eine Python-Variante wie jython, pypy, iron-python usw. verwenden, kennzeichnen Sie diese bitte entsprechend.
___ tag123python3x ___ Python 3 ist die neueste Version der Python-Programmiersprache und wurde am 3. Dezember 2008 offiziell veröffentlicht. Verwenden Sie das allgemeinere [python] -Tag, wenn Ihre Frage nicht versionsspezifisch ist.
___ answer19854684 ___
Denken Sie daran, dass Klassen Objekte in Python sind.
%Vor%
Bedeutet, dass sich selbst auflisten ist aufrufbar, anstatt dass es aufrufbar ist. Wie Sie gesehen haben, sind sie nicht:
%Vor%
Tatsächlich sind alle Klassen in Python aufrufbar - wenn sie keine Literale wie %code% haben, ist dies die übliche Art, sie zu instanziieren. Überlegen Sie:
%Vor%
Die letzte Zeile ruft das %code% -Klassenobjekt auf, das eine Instanz erstellt - also muss %code% aufrufbar sein. Aber Sie würden nicht erwarten, dass -Instanz aufrufbar ist, da %code% selbst kein %code% definiert.
Andererseits ist die Klasse von %code% (dh ihre Metaklasse, %code% ) :
%Vor%
was macht %code% aufrufbar.
___ answer19854355 ___
Warum gibt callabe (list) true zurück, aber callable (l) nicht?
Weil %code% eine eingebaute Python-Funktion ist, während %code% eine Liste ist.
___