Python 和 JavaScript 中 Yield 的区别
@TOC
推荐超级课程:
Pythonyield
在 Python 中,yield
主要用于生成器函数。生成器函数是一个返回迭代器的特殊函数,yield
可用于每次生成一个值。
def generator_example():
yield 1
yield 2
yield 3
gen = generator_example()
print(next(gen)) # 出力: 1
print(next(gen)) # 出力: 2
print(next(gen)) # 出力: 3
JavaScriptyield
在 JavaScript 中,yield
用于function*
使用以下定义的生成器函数中yield
暂停生成器的执行并向调用者返回一个值。
function* generatorExample() {
yield 1;
yield 2;
yield 3;
}
const gen = generatorExample();
console.log(gen.next().value); // 出力: 1
console.log(gen.next().value); // 出力: 2
console.log(gen.next().value); // 出力: 3
Pythonyield from
在Python中yield from
,它用于从其他生成器或可迭代对象中获取值。
def sub_generator():
yield 1
yield 2
yield 3
def main_generator():
yield from sub_generator()
yield 4
gen = main_generator()
print(next(gen)) # 出力: 1
print(next(gen)) # 出力: 2
print(next(gen)) # 出力: 3
print(next(gen)) # 出力: 4
JavaScriptyield*
JavaScriptyield from
没有与 Python 相同的功能,但yield*
它有一个类似的关键字:这可以用于从其他生成器函数中获取值。
function* subGenerator() {
yield 1;
yield 2;
yield 3;
}
function* mainGenerator() {
yield* subGenerator();
yield 4;
}
const gen = mainGenerator();
console.log(gen.next().value); // 出力: 1
console.log(gen.next().value); // 出力: 2
console.log(gen.next().value); // 出力: 3
console.log(gen.next().value); // 出力: 4