2の累乗を求めるリスト内包記法ですが、ジェネレーターを使うときは、止める部分を用意しないと、終了できなくなるようです。遅延評価を理解できてないのですが、すべての計算をしようとする無限ループになるので、一旦中止して処理が終わったら、次の数に行くようには出来ないんですかね。
Visual Studio 2022でpythonを組み込んでましたが、printに漢字をいれるとエラーになりました。python3だとそんなことはないのでしょうが、どうしてですかね?
これで暫く悩んでました。(涙)
2の累乗を求めるリスト内包記法ですが、ジェネレーターを使うときは、止める部分を用意しないと、終了できなくなるようです。遅延評価を理解できてないのですが、すべての計算をしようとする無限ループになるので、一旦中止して処理が終わったら、次の数に行くようには出来ないんですかね。
Visual Studio 2022でpythonを組み込んでましたが、printに漢字をいれるとエラーになりました。python3だとそんなことはないのでしょうが、どうしてですかね?
これで暫く悩んでました。(涙)
def gen2bekijyo(n):
i = 0
while True:
if i == n:
break
yield 2 ** i
i += 1
として、
>>> [i for i in gen2bekijo(10)]
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
でいいでしょう。
また、べき乗そのものを書くなら
>>> [2**i for i in range(10)]
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]
>>>
で充分でしょうね。
> これで暫く悩んでました。(涙)
なんだろ。
Linuxじゃあ問題がないんですが・・・・・・。
VS Codeが扱ってる文字コード、あるいは端末が扱ってる文字コードがUTF-8になってないのかなぁ。
でもコメントのようにすれば、解決ですね。
ジェネレータ式でしょう?
6.2.8. ジェネレータ式:
https://docs.python.org/ja/3/reference/expressions.html?highlight=%E3%82%B8%E3%82%A7%E3%83%8D%E3%83%AC%E3%83%BC%E3%82%BF#generator-expressions
多分ですが、リストで返す方はデータの全てを取り込むようです。()で返す方は個数がわからないので、最後はエラーが起きるので、エラー処理が必要だと思います。
Visual Studio 2019のPythonのprintで漢字コードを入れるとエラーになったんですが、VSCodeで入力し直したら、解消しました。