それでもjupyter などで使おうとするとやはり苦労するよね? 0183デフォルトの名無しさん2019/02/17(日) 17:50:07.52ID:+S0MQzvf 質問(1) ‘__main__’ in globals() や、 2 in [1,2,3] がTrueになるのはなんで? 定数 in 集合は、定数を取り出せと言う意味なのかな?
i in [1,2,3] が許されないのは何を取り出すのわからないからかな?
質問(2) print( [i for i in [1,2,3] ] ) が許されて print( (i for i in [1,2,3] ) ) が許されないのがわからない。 0184デフォルトの名無しさん2019/02/17(日) 17:56:47.88ID:T3+WXnTJ>>183 質問(1)は自己解決 まともな文法書を読み始めて2日目で、ようやくたどり着いた。
《in演算子によるメンバシップ検査》 書き方: 要素 in リスト リストの中に要素があればTrue,なければFalseを返す.要素が含まれないことを検査するにはnot inと記述する 0185デフォルトの名無しさん2019/02/17(日) 18:15:18.83ID:naWxhgEk>>182 グダグダ言う暇あったらテキトーなIDE使ってみなよ スペースの数とかも指定できる そもそも他の開発者がいちいち一括変換とかして苦労してるわけ無いだろ 0186デフォルトの名無しさん2019/02/17(日) 19:09:07.40ID:9eEjpIke>>183 質問(2)について 二つ目が「許されない」と言う意味が分からないが、少なくとも文法的には間違いではない (i for i in [1,2,3] ) はジェネレータ内包表記といいgeneratorオブジェクトになる ジェネレータはnext関数に渡すと次々に値を返す。最後まで到達するとStopIteration例外を出す >>> gen = (i for i in [1,2,3]) >>> gen <generator object <genexpr> at 0x7fb1b1a86ba0> >>> next(gen) 1 >>> next(gen) 2 >>> next(gen) 3 >>> next(gen) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration 0187デフォルトの名無しさん2019/02/17(日) 19:20:42.25ID:glILnxtO ビートセイバーの通常プレイってなんだかんだで斬る方向も指定されるから いまいち魅せプレイには向いてないんよな めめめにダースモールプレイでくるくるしてほしいンゴ
https://www.youtube.com/watch?v=e-m09N_HtRk0188デフォルトの名無しさん2019/02/17(日) 19:20:57.80ID:glILnxtO 誤爆 0189デフォルトの名無しさん2019/02/17(日) 19:31:52.09ID:+S0MQzvf>>186 有り難う。 同じような形なのになんでprint ができないのかと言う疑問だった。 print( (i for i in [1,2,3] ) ) は、ジェネレータから取り出してしないからと言う理解で良いの? 0190デフォルトの名無しさん2019/02/17(日) 19:51:22.25ID:OPCV5npO>>189 Pythonの分かりにくいところだよね 同じ記号を別の意味で使っている
[1,2,3] リスト。集合は可変 (1,2,3) タプル。集合は不変
if 2 in [1,2,3] リストの中に2が含まれるか判別 for i in [1,2,3] リストの要素で繰り返し
[i for i in [1,2,3]] リストの要素で繰り返した結果を演算しリストとする (i for i in [1,2,3]) リストの要素で繰り返した結果を演算するgeneratorを返す
普通に考えたらgeneratorではなく演算結果をタプルで返すように思うよね 0191デフォルトの名無しさん2019/02/17(日) 20:07:17.70ID:U9IIuCB3 内包表記でタプルは作れない(ジェネレータになる)だけで一貫してるだろ それに for i in イテラブル じゃなくて i for i in イテラブル だし 0192デフォルトの名無しさん2019/02/17(日) 20:25:38.62ID:WySC1FKQ>>184 「まともな文法書」が何かを記していただければ、このスレの住民には助かると思います 0193デフォルトの名無しさん2019/02/17(日) 20:31:16.29ID:tKx1WgvG in単体なら演算子だけど、forではそれ含めて文だからねぇ 文脈によって解釈が変わるのはC/C++でも英語でも同じ
そしてタプルを作るのは丸括弧ではなく「,」である 0194デフォルトの名無しさん2019/02/17(日) 20:33:32.71ID:U9IIuCB3 というか「(1,2)はカッコがあるからタプル」は偽だから (x for x in [1,2,3])がタプル返す義理はないな まぁその辺のサイトみたら軒並み「タプルはカッコでくくってつくる」って書いてあるのはそうだけど ドキュメントにはそうは書いてない 0195デフォルトの名無しさん2019/02/17(日) 20:39:37.47ID:9eEjpIke 確かにカッコ使わずに a =1,2,3 でもタプルになるしな 0196デフォルトの名無しさん2019/02/17(日) 20:42:19.07ID:OPCV5npO>>194 カンマで区切ればタプルにるけどさ、タプルの出力は必ずカッコで括られるんだから、直感と違うわけだよ 0197デフォルトの名無しさん2019/02/17(日) 20:44:17.06ID:GfPZMs79 カッコつけてるだけだよ 0198デフォルトの名無しさん2019/02/17(日) 20:46:20.17ID:4CukteGI リストはイテラブルなオブジェクトでイテレータではないらしいけど、なんで最初からリストをイテレータとして使えるようにnextメソッドを実装しておかないんや 0199デフォルトの名無しさん2019/02/17(日) 20:47:29.51ID:glILnxtO>>196 practicality beat purity(実用性は純粋さに勝る)だぜ ジェネレーターにすれば途方もない数も扱えるわけだし デフォでジェネレーターになるのはしょうがない
>>194 (x, for x in [1,2,3])とかならタプルを生成しなんだろうが 0201デフォルトの名無しさん2019/02/17(日) 20:50:48.52ID:U9IIuCB3>>200 (x, for x in [1,2,3]) はシンタックスエラー ((x,) for x in [1,2,3]) ならタプルを3つ返すジェネレータができる 0202デフォルトの名無しさん2019/02/17(日) 21:11:43.56ID:GfPZMs79 (x,)っていかにも要素2つありそうな見た目だけど要素数1のタプルなの?w