[PYTHON] Verhalten in jeder Sprache, wenn Collouts mit for wiederverwendet werden

Beachten Sie, dass das Verhalten je nach Sprache unterschiedlich zu sein scheint.

C# ##

using System;
using System.Collections.Generic;

class Program {
    static IEnumerable<string> Three() {
        yield return "one";
        yield return "two";
        yield return "three";
    }

    static void Main() {
        var co = Three();

        Console.WriteLine("1");
        foreach (var x in co)
            Console.WriteLine(x);

        Console.WriteLine("2");
        foreach (var x in co)
            Console.WriteLine(x);
    }
}

Ausführungsergebnis:

1
one
two
three
2
one
two
three

JavaScript(Node)

"use strict"

function* three() {
    yield "one";
    yield "two";
    yield "three";
}

function main() {
    var co = three();

    console.log("1");
    for (let x of co)
        console.log(x);

    console.log("2");
    for (let x of co)
        console.log(x);
}

main();

Ausführungsergebnis:

1
one
two
three
2

Julia

function three()
    produce("one")
    produce("two")
    produce("three")
end

function main()
    co = @task three()

    println("1")
    for x = co
        println(x)
    end

    println("2")
    for x = co
        println(x)
    end
end

main()

Ausführungsergebnis:

1
one
two
three
2

Lua

function three()
    coroutine.yield("one")
    coroutine.yield("two")
    coroutine.yield("three")
end

function main()
    co = coroutine.wrap(three)

    print("1")
    for x in co do
        print(x)
    end

    print("2")
    for x in co do
        print(x)
    end
end

main()

Ausführungsergebnis:

1
one
two
three
2
lua: a.lua:17: cannot resume dead coroutine
stack traceback:
	[C]: in function 'for iterator'
	a.lua:17: in function 'main'
	a.lua:23: in main chunk
	[C]: in ?

Python

def three():
    yield "one"
    yield "two"
    yield "three"

def main():
    co = three()

    print("1")
    for x in co:
        print(x)

    print("2")
    for x in co:
        print(x)

main()

Ausführungsergebnis:

1
one
two
three
2

Nachtrag:

Es gibt auch die folgenden Methoden.

class three:
    def __iter__(self):
        yield "one"
        yield "two"
        yield "three"

Ausführungsergebnis:

1
one
two
three
2
one
two
three

Ruby

def three
  Enumerator.new do |y|
    y << "one"
    y << "two"
    y << "three"
  end
end

def main
  co = three()

  puts "1"
  for x in co
    puts x
  end

  puts "2"
  for x in co
    puts x
  end
end

main

Ausführungsergebnis

1
one
two
three
2
one
two
three

Zusammenfassung

Wenn in C # und Ruby dasselbe Coroutum in der for-Anweisung wiederverwendet wird, verhält es sich so, als würde es vom Anfang des Elements extrahiert. In JavaScript (Node), Julia, Lua und Python verhält sich das Collout so, dass es nicht wiederverwendet werden kann, weil es aufgebraucht ist.

Version jeder Sprache

Recommended Posts

Verhalten in jeder Sprache, wenn Collouts mit for wiederverwendet werden
Verhalten bei der Rückkehr in den with-Block
Erstellen Sie mit boot2docker eine Ausführungsumgebung für jede Sprache
Unterschiede im Verhalten jeder LL-Sprache, wenn der Listenindex übersprungen wird
Für diejenigen, die Probleme mit einem Fehler haben, wenn pip xg boost installiert
Für diejenigen, die in Schwierigkeiten sind, weil NFC beim Lesen von NFC mit Python endlos gelesen wird
Verhalten, wenn mehrere Server in Nameservern von dnspython angegeben sind
Verhalten beim Angeben einer Liste mit shell = True im Unterprozess
Wenn Sie ständig nach Ihrem Login-Passwort mit Fabric gefragt werden
Dockerfile mit den notwendigen Bibliotheken für die Verarbeitung natürlicher Sprache mit Python
Zeigen Sie die Beschriftung jedes Elements an, wenn Sie ein Streudiagramm in Pandas zeichnen
Die Geschichte, dass Vererbungsverhalten in jeder Sprache sehr unterschiedlich ist
Verhalten beim Auflisten in Python heapq
Segfo mit 16 Zeichen in C-Sprache
Die Geschichte, wenn in Optuna unterschiedliche Verteilungen für denselben Parameter angegeben werden
Tipps zum Umgang mit Binärdateien in Python
[Python, Multiprocessing] Verhalten für Ausnahmen bei Verwendung von Multiprocessing
Vorsichtsmaßnahmen bei Verwendung der for-Anweisung in Pandas
Begrenzen Sie ssh mit iptables für jeden Benutzer
Verarbeiten Sie mehrere Listen mit for in Python
Häufig verwendetes Syntaxmemorandum für jede Sprache
[Mit japanischem Modell] Satzvektormodell empfohlen für Personen, die 2020 natürliche Sprache verarbeiten
[Für Anfänger] Unerwartetes Verhalten, wenn beim Festlegen des Pfads in Python "\" enthalten ist
In GCS mit Python platzierte Zeichenketten werden beim Anzeigen mit einem Browser verstümmelt