🐕

最初の一回で終わって値を返すgenerator

に公開

JSでは

function * f() {
  return 10;
}

const ret = f().next();

console.log(ret.value);  // output: 10
console.log(ret.done);  // output: true

というのができる。つまり、最初のnextで終わって(done == true)値を返す(10)。
これをPythonでやるにはどうすればよいかというのを考えた結果、以下になった。

def f():
  return 10
  yield

try:
  next(f())
except StopIteration as e:
  print(e.value)

もっとまともな方法はありそう(念の為書くと、return 10ではなくyield 10にするとStopIteration例外が飛ばない)。

Discussion