Wie funktioniert iter ()? ___ antwort19854410 ___

Von %code% help:

  

iter (...)
      iter (Sammlung) - & gt; Iterator
      iter (aufrufbar, Sentinel) - & gt; Iterator

%Vor%

Sie mischen zwei Varianten von %code% 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 %code% -Funktion erhalten. Geben Sie einfach die Python-Konsole %code% ein und Sie erhalten eine Dokumentation darüber.

  

Warum gibt callabe (list) true zurück, aber callable (l) nicht?

Weil %code% 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?

  1. manuelle Pausen
  2. 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.

    
___

8

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?

  1. manuelle Pausen
  2. hundert andere

Vielen Dank im Voraus

    
new-kid 08.11.2013, 08:05
quelle

6 Antworten

5
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?

  1. manuelle Pausen
  2. 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.

    
___
aga 08.11.2013, 08:17
quelle
5

Wenn iter mit zwei Argumenten aufgerufen wird, verwendet f einen Callable- und einen Sentinel-Wert. Das Verhalten ist so, wie es implementiert wurde:

%Vor%

Was als list übergeben wird, muss aufrufbar sein , was bedeutet, dass Sie es einfach wie eine Funktion aufrufen können. Das type builtin ist ein l -Objekt, mit dem Sie neue Listeninstanzen erstellen können, indem Sie es wie eine Funktion aufrufen:

%Vor%

Die Liste list , 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 iter type und den Listeninstanzen, der bei Verwendung mit itertools.takewhile angezeigt wird.

Um eine Liste zu durchlaufen, bis ein Sentinel erreicht ist, können Sie %code% :

verwenden %Vor%     
Michael J. Barber 08.11.2013 08:34
quelle
4

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 iter() für jede Iteration __next__() für das übergebene Objekt auf.

iter() 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%     
Henrik Andersson 08.11.2013 08:17
quelle
3

Sehen Sie sich die Dokumentation Ссылка

an

Wenn das zweite Argument in iter 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%     
freakish 08.11.2013 08:17
quelle
3

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 list haben, ist dies die übliche Art, sie zu instanziieren. Überlegen Sie:

%Vor%

Die letzte Zeile ruft das MyClass -Klassenobjekt auf, das eine Instanz erstellt - also muss MyClass aufrufbar sein. Aber Sie würden nicht erwarten, dass -Instanz aufrufbar ist, da MyClass selbst kein __call__ definiert.

Andererseits ist die Klasse von MyClass (dh ihre Metaklasse, type ) :

%Vor%

was macht MyClass aufrufbar.

    
lvc 08.11.2013 08:36
quelle
1
  

Warum gibt callabe (list) true zurück, aber callable (l) nicht?

Weil list eine eingebaute Python-Funktion ist, während l eine Liste ist.

    
user1907906 08.11.2013 08:14
quelle

Tags und Links