Pythonのお勉強 Part6 ..
[2ch|▼Menu]
577:デフォルトの名無しさん
22/11/02 11:21:15.39 1xZXeW2Ya.net
linkedなリストは関係ないよな
連続したメモリに入ってる配列的なやつはアレだけど

578:デフォルトの名無しさん
22/11/02 11:39:42.36 FQ1wBQnh0.net
>>570
str との違いも結局これだし

579:デフォルトの名無しさん
22/11/02 14:55:39.24 VFt43YlcM.net
pythonのリストはポインタの配列でしょ?

580:デフォルトの名無しさん
22/11/02 18:15:12.19 1xZXeW2Ya.net
違います

581:デフォルトの名無しさん
22/11/02 18:27:31.11 jyU6y3CY0.net
PyObject*の配列です
PyObject **ob_item; // PyObject*の配列
Py_ssize_t allocated; // アロケートされてる個数

582:デフォルトの名無しさん
22/11/02 18:28:55.28 jyU6y3CY0.net
cpythonなソースは読みやすい

583:デフォルトの名無しさん
22/11/02 18:42:15.13 ul/vZuFO0.net
0から255までの数字が入った要素数1000の配列があって、
Cだとunsigned char list[1000];
みたいに宣言してlist[i]で参照するとアドレス計算で値を取ってくるけど、
pythonはどうやってるの?

584:デフォルトの名無しさん
22/11/02 18:43:56.47 4MCwg8YuM.net
ちょっと調べた限りやっぱりPythonのリストはポインタの配列だと思うんだが違うっていうなら何か教えて
insertの遅さとかで連結リストではないとは思うけど

585:デフォルトの名無しさん
22/11/02 18:51:59.96 wyluLqIy0.net
>>574が正しい
URLリンク(github.com)

586:デフォルトの名無しさん
22/11/02 18:55:42.08 jyU6y3CY0.net
cpythonのソースはマジで読みやすい
Rubyとかもうぐちゃぐちゃしてて読めねえもん

587:デフォルトの名無しさん
22/11/02 19:05:34.74 jyU6y3CY0.net
実際の配列のサイズはPyObject_VAR_HEADマクロのob_sizeに入ってる

588:デフォルトの名無しさん
22/11/02 19:12:23.01 1xZXeW2Ya.net
>>577
別になんでもいいんです

589:デフォルトの名無しさん
22/11/02 19:14:41.69 5K2+hbiBa.net
答え書かれてるのに全く分かってなくて草

590:デフォルトの名無しさん
22/11/02 19:30:34.65 1xZXeW2Ya.net
大学行くと実装と仕様の区別がつくようになるかも?

591:デフォルトの名無しさん
22/11/02 19:31:01.29 l50Y39h10.net
>>574
つまりポインタの配列

592:デフォルトの名無しさん
22/11/02 19:31:44.66 ul/vZuFO0.net
listにappendすると、ポインタの配列の末尾にポインタが追加される
配列のサイズが変わるので、サイズを増やした配列を作ってコピーしないとできない
筈なのに、idを調べると変わらない
**ob_itemに入ってる値は変わるけど、**ob_item自体のアドレスは変わらない
ということ?

593:デフォルトの名無しさん
22/11/02 19:33:58.87 l50Y39h10.net
組み込みだから作り直した配列にidがコピーされてたり

594:デフォルトの名無しさん
22/11/02 19:36:39.11 oCOyjRuB0.net
VM上は指すオブジェクト変わってないのにid変わったらあかんでしょ

595:デフォルトの名無しさん
22/11/02 19:40:00.28 rAnbDRgM0.net
適当にリンクリストあたりかと思ってた

596:デフォルトの名無しさん
22/11/02 19:40:29.11 ul/vZuFO0.net
appendしても同じオブジェクトという時点で違和感があるんだよな
明らかに別物やん
仮にappendが非破壊で
list = list.append()
とした時にidが変わる方が納得できる

597:デフォルトの名無しさん
22/11/02 19:40:29.75 5K2+hbiBa.net
>>585
逆だよ
ob_item自体は大きさが変わる時にreallocでアドレスが変わるけど
中身の方はポインタをコピーするだけだから変わらない

598:デフォルトの名無しさん
22/11/02 19:42:07.37 1xZXeW2Ya.net
>>577
違うって理解できた?

599:デフォルトの名無しさん
22/11/02 19:51:27.03 5K2+hbiBa.net
>>589
そもそもが全部Cで実装されてるんだからそういうメモリモデルなんだ、という理解で良いと思うよ

600:デフォルトの名無しさん
22/11/02 19:53:06.08 4MCwg8YuM.net
>>591
あなたは何もわかってないのは理解できました

601:デフォルトの名無しさん
22/11/02 19:57:27.92 1xZXeW2Ya.net
>>593
わかんない?
違うよ
どんどん主張が後退するんじゃねえかなという期待の下、繰り返すけど

602:デフォルトの名無しさん
22/11/02 21:11:39.58 CsBXjP5R0.net
リンクリストはリスト的なものを作るときに第一の選択肢としてはこないと思うよ。
任意の要素へのアクセスがO(n)かかるから。
必ず頭から順番に読んで、途中に挿入したいことが多いとかいう状況だったら使うけど、こういう特性を、癖があると思う人の方が多いんじゃないかな。
そういうコンピュータサイエンスの初歩みたいなところの実装が気になるなら、Javaを勉強してみるといいかもね。
リストも辞書もセットも、複数の実装方法が標準で用意されてて明示的にどれを使うか決めなくちゃいけないから。
そう考えると初心者にJava教えてた頃ってコレクションで付いていけなくなり勉強を諦めた人多いんだろうか。

603:デフォルトの名無しさん
22/11/02 21:16:31.46 CsBXjP5R0.net
>>589
夕飯を食べる前の自分と食べた後の自分は別のインスタンスか?って問いにyesと答えられるならばイミュータブルなものにしかidを付けてはいけないと考えているのだろう(そういう言語もある、Haskellとか)
そうでなければ、ミュータブルなインスタンスはミュータブルなんだからidが同じでも中身は変化すると考えるべきだろう

604:デフォルトの名無しさん
22/11/02 21:22:30.41 jJasVlr90.net
idってCでのアドレスそのものなんでしょ
実装の都合でアドレスが変わったらidも変わるというだけの話で、
何らかのポリシーみたいなものは背景に無いような

605:デフォルトの名無しさん
22/11/02 21:30:55.81 CsBXjP5R0.net
>>597
CPythonではな。(すみません知りませんでした)
しかしGCがかかりまくるVM上で動くPythonの実装もあるから、CPythonではそうっていう認識に留めておいたほうがいいんじゃないかなあ。

606:デフォルトの名無しさん
22/11/02 21:42:19.23 2orW5ow60.net
idが変わる/変わらないとミュータブル/イミュータブルは一対一対応?

607:デフォルトの名無しさん
22/11/02 22:06:28.39 CsBXjP5R0.net
>>599
まず、イミュータブルというのをどう定義するかによると思うけど
(タプルはイミュータブルだが、タプルの中にリストを入れた場合、リストほミュータブルで、リストに変更を加えてもタプルのインスタンスが新しくできるわけではない)
そういうややこしい例を除いても、
イミュータブルならば、値を変えたらidが変わる
値を変えてもidが変わらないならミュータブル
しか言えないんじゃない?

608:デフォルトの名無しさん
22/11/02 22:13:30.31 F9kh54e50.net
定義や実装で何がミュータブルかがころころ変わってはいけなくて、
pythonではどんな環境でも同じものがミュータブルであるべき
で、idが変わる/変わらないが環境依存ならば、idとミュータブルは関係ないことになる

609:デフォルトの名無しさん
22/11/02 22:18:06.81 jyU6y3CY0.net
わけわからん

610:デフォルトの名無しさん
22/11/02 22:20:05.72 yCeW62XuM.net
pythonの辞書ってc++のmapと違って内部でソートされてないからアクセス遅いっぽいんだよね
keysで取り出しても登録した順だし
文字列でも数値でもキーにできるからそういうものなのか

611:デフォルトの名無しさん
22/11/02 22:50:50.14 rAnbDRgM0.net
>>595
最後尾への追加削除がO(1)だったからリンクリストだと思ったけど
リアロケートの実装でどうにかそれっぽくなるんだねぇ
全く気にしてなかったけど、勉強になったわ

612:デフォルトの名無しさん
22/11/02 22:58:46.37 P6hHm0TD0.net
ループで一つずつappendしていくようなコードは、
溜めておいて一気にどーんで高速化できそう

613:デフォルトの名無しさん
22/11/02 23:13:03.99 Vdzb0Lkj0.net
Elixir なんて片方向リストだから、先頭の要素の追加・削除のみ速い。
末尾では全要素をたどる
Ruby は両方向リストだったかな?

614:デフォルトの名無しさん
22/11/02 23:41:13.42 d827SSNz0.net
>>603
pythonの辞書は順番を保持することが仕様で規定されてる

615:デフォルトの名無しさん
22/11/03 00:20:58.38 gcHdWorI0.net
3年くらい前からだっけ?
キーバリューやから順番気にしたことなかったわ

616:デフォルトの名無しさん
22/11/03 00:37:59.14 vWeFXHff0.net
順番が同じだとセキュリティの問題があるから意図的にランダムにしてなかったっけ

617:デフォルトの名無しさん
22/11/03 00:45:24.21 9oLRzF140.net
>>604
C++のvectorとか、JavaのArrayListの典型的な実装だと、リアロケートが発生するときに倍ぐらいの領域を予め確保しておく、ってのが普通って読んだな
コードレベルで読んだ訳じゃないから確たるエビデンスがあるわけじゃないけど。

618:デフォルトの名無しさん
22/11/03 00:49:20.51 9oLRzF140.net
辞書は3.5だかそのぐらいで入れた順になるように仕様が決まったよね
それまではバラバラだったはず
あとソート済みが欲しいならsortedcollectionsがあるんじゃないの
Pythonでパフォーマンス気にするようなコード書いたことないから速くなるかは知らないが
パフォーマンス気になるならもう普通にpybind11よ

619:デフォルトの名無しさん
22/11/03 01:13:09.17 t2qUW0n10.net
動的配列は償却計算量の典型例だぞ

620:デフォルトの名無しさん
22/11/03 09:06:43.51 b87ZSO0X0.net
半島人w

621:デフォルトの名無しさん
22/11/03 13:19:41.92 M31+WIXk0.net
ネトウヨはコードすら書けない

622:デフォルトの名無しさん
22/11/03 17:39:13.22 JzcJhjtx0.net
isPrime(n: int):
__for i in range(2, n//2 + 1):
____if (not n%i):
______return 0
__return 1
numPrimes = 0
for i in range(2, 250001):
__numPrimes += isPrime(i)
print(numPrimes)
cとかだと5秒以下で終わると思うんですが
pythonではどうやって高速化できますか?

623:デフォルトの名無しさん
22/11/03 17:50:53.27 6cc1wOit0.net
全角スペースでインデントするといい

624:デフォルトの名無しさん
22/11/03 17:57:37.28 t2qUW0n10.net
エラトステネスの篩みたいなまともなアルゴリズムを使え

625:デフォルトの名無しさん
22/11/03 18:05:57.27 pngFKRCN0.net
>>615
range(2, n//2 + 1) を range(2, int(n**0.5)+1)
にするだけで速くなると言うのは違うか。
n**0.5 は math を import するのが面倒だっただけ。。。

626:デフォルトの名無しさん
22/11/03 18:12:13.51 Tny9BBIXa.net
しょーもないネタ振り

627:デフォルトの名無しさん
22/11/03 18:58:51.96 Ppt07bQPH.net
>>617
言語間の速度差を埋めたいという文脈で
片方により効率的なアルゴリズム使えというのは筋が違うと思う
それやったら相手のCも早くなるやん

628:デフォルトの名無しさん
22/11/03 19:15:26.76 t2qUW0n10.net
それはそうだけどPythonをできるだけ速くしようというのは徒労に終わるんだよな

629:デフォルトの名無しさん
22/11/03 19:17:29.83 5fumPTTR6.net
>>615
allかanyか使う

630:デフォルトの名無しさん
22/11/03 19:45:13.49 NbsIPyEs0.net
>>620
> 言語間の速度差を埋めたいという文脈で
そうか、単にPythonで高速化したいだけに見えるけど?
> pythonではどうやって高速化できますか?

631:デフォルトの名無しさん
22/11/03 20:09:45.07 6A5YXZlC0.net
>>615
sympy.isprime()

632:デフォルトの名無しさん
22/11/03 20:13:41.27 6A5YXZlC0.net
>>615
そもそもこのプログラムは一行で済む
print(sympy.primepi(250001))

633:デフォルトの名無しさん
22/11/03 20:16:42.18 gDosIilW0.net
SymPy無いさー

634:デフォルトの名無しさん
22/11/03 22:42:51.75 qK/YTuYk0.net
Numpyさぁ

635:デフォルトの名無しさん
22/11/04 11:06:17.40 RgN4dMLC0.net
公式のドキュメント読むと
「pip は推奨されるインストーラ・プログラムです。 Python 3.4 からは、 Python バイナリ・インストーラに最初から付属するようになりました。」
とか見るけど、触る環境どれも最初からインストールされてた試しがなくて手動インストールばっかなんだが

636:デフォルトの名無しさん
22/11/04 11:16:46.46 +Vzk9d850.net
>>628
どこのバイナリインストーラ使ってるの?

637:デフォルトの名無しさん
22/11/04 11:23:08.55 eh042CP4a.net
>>628
たぶん入ってるけど実行ファイルのパスが通ってないんだよ

638:デフォルトの名無しさん
22/11/04 11:26:42.20 iSP9CUI40.net
debianとかはOSのスクリプトを実行するための環境なので
最小限になるようパッケージが分かれている
不便にみえるけどユーザが使う場合はパッケージ外で導入した方が
特定のバージョンも好きにえらべてシンプル

639:デフォルトの名無しさん
22/11/04 13:14:21.89 xdVLdIYL0.net
npm/yarn, Ruby のbundler などは、デフォルトでコマンド実行できるけど
多分これらは、デフォルトで環境変数PATH にあるフォルダにインストールされるのだろう

640:デフォルトの名無しさん (ブーイモ MMdd-uk66)
22/11/04 19:16:21.95 7+yqrzWjM.net
>>628
python -m pipするのが安全やで(pipコマンドだと、複数バージョン入ってると意図したpythonに紐づいてないpipが実行される場合がある)

641:デフォルトの名無しさん
22/11/05 21:26:42.31 MH3sXGrP0.net
pythonつかって紙に書いた文字判別するとかって簡単にできますか?

642:デフォルトの名無しさん
22/11/05 21:34:23.73 7lAZ3AaJ0.net
簡単だけど有料

643:デフォルトの名無しさん
22/11/05 21:51:22.37 MH3sXGrP0.net
>>635
無料のライブラリなんかありませんかね?無いんなら諦めます

644:デフォルトの名無しさん
22/11/05 21:58:26.55 yxkEcNx60.net
>>634
判別とはどういうことをしたいのかよくわからんけどとりあえず python ocr とかでぐぐればいいんじゃね?
URLリンク(gammasoft.jp)

645:デフォルトの名無しさん
22/11/05 21:58:41.35 j6cTC8iG0.net
自分で無料ライブラリーを作る、しか

646:デフォルトの名無しさん
22/11/05 22:07:24.17 MH3sXGrP0.net
>>637
ありがとうございます!

647:デフォルトの名無しさん (ワッチョイ d204-ocuO)
22/11/06 18:38:56.63 hWJeexFN0.net
pythonでなんかかっこいいことがしたいです
でもやることが見つかりません。どうしたらいいですかね
今までポイントサイトをseleniumで自動化したりdiscordのbot作ったり動画編集自動化したりしてきたんですが先というか続きが見えません

648:デフォルトの名無しさん
22/11/06 19:03:47.89 tSvQZNnX0.net
PyPIザッピングして良さそうなモジュールみつけてかっこいい応用を書く

649:デフォルトの名無しさん
22/11/06 19:05:44.66 A20KyXoS0.net
ラズパイでIoT
リアルの物を動かせると、やれる事の幅が広がるよ

650:デフォルトの名無しさん
22/11/06 19:13:43.26 hyDfi3PG0.net
>>640
壁に落書きしてくるのがかっこいいと思ってるんなら大間違いだわw

651:デフォルトの名無しさん
22/11/06 21:07:15.95 hWJeexFN0.net
PyPIで良さそうなモジュール見つけるってどうやるの?
PyPI サイト見てtrend moduleみたいなの適当に選んで説明見ても詳しい使い方がわからない

652:デフォルトの名無しさん
22/11/06 21:15:54.96 2BZA6H+N0.net
電子工作もそうだけど、環境は整いすぎに整ってて、やりたいことがあれば何でもすぐにできる
でもやりたいことが見つからない
さてはみんな環境を整えることを目的にしているな

653:デフォルトの名無しさん
22/11/07 06:48:18.34 E9VDXcWoM.net
アホな質問だな~
まずやりたいことがあって、それからツールを探すものだろ

654:デフォルトの名無しさん
22/11/07 08:02:58.71 jFHCFA25a.net
その通りだけどやりたいことが見つからないんだわ
もしかすると勉強からの逃避のためにプログラミングという逃げ場を作りたいのかもしれない。やりたいことが自然と出てきたらやることにするよ

655:デフォルトの名無しさん
22/11/07 08:09:59.84 nVmoLWqcM.net
遠回りの人生それも人生

656:デフォルトの名無しさん
22/11/07 10:49:11.04 vghVm0yU0.net
巨大数の実数計算は最先端だぞ。

657:デフォルトの名無しさん
22/11/07 14:36:29.74 ns7213lX0.net
>>634
EasyOCR は?
pytorch必須だが

658:デフォルトの名無しさん
22/11/07 14:48:18.41 a5k3bCTy0.net
使い物になるOCRはみんなAIで有料なんだよな
客はDXしたい企業だから高い

659:デフォルトの名無しさん
22/11/07 15:15:22.15 dmSTAQ160.net
料金みたことある?業務で考えたらめちゃ安いとおもうが

660:デフォルトの名無しさん
22/11/07 15:26:05.72 kmERiYaX0.net
有料OCR知ってる俺スゲー君なんて相手にすんなよ...

661:デフォルトの名無しさん
22/11/07 15:26:54.13 a5k3bCTy0.net
OCRしたい書類なんて有限だから、あらかた終わったら需要が無くなる
そしたらgoogle様が無料開放してくれる筈

662:デフォルトの名無しさん
22/11/07 15:41:01.53 rtBnyCPM0.net
Pythonが「メインの利用言語」で2位にとどまる、1位に立ったのは定番のあの言語
URLリンク(xtech.nikkei.com)

663:デフォルトの名無しさん
22/11/07 15:51:46.76 a5k3bCTy0.net
AIだから教育が必須で、それなりにコストがかかる
こんなもんは公共事業で、どこかが代表してやって、コスト回収できたら無料化する
各国で自分のとこの言語についてやるのが筋だけど、
どうせ日本はやらないのでgoogleがやる

664:デフォルトの名無しさん
22/11/07 16:22:49.11 a5k3bCTy0.net
似たようなので、音声からテキストへの変換も金かかる
あれが無料で出来たら過去の膨大な音声や動画の資料が検索したり分析可能になって、
文化が大きく前進するだろうに金がブレーキかけてる
国の事業としてやれば一人頭の負担なんて微々たるものなのに

665:デフォルトの名無しさん
22/11/07 16:28:42.14 ns7213lX0.net
この夏whisperが公開されたやろ?

666:デフォルトの名無しさん
22/11/07 16:32:21.66 a5k3bCTy0.net
そんなのあったのか
マスク様々やな

667:デフォルトの名無しさん
22/11/07 16:46:46.72 6QND4EcV0.net
>>655
Rubyオワコン

668:デフォルトの名無しさん
22/11/07 21:52:40.91 J6xutGri0.net
>>657
つまり文字起こし言いたいんだろ?
なんかクソ認識悪いAPIだったら何かあった気がする

669:デフォルトの名無しさん
22/11/08 10:16:17.14 gvBOR9qA0.net
半島系帰化人は強姦魔ばかり
死ねよクズ帰化人!

670:デフォルトの名無しさん
22/11/08 11:03:03.92 NJ3yWFAyM.net
何でこのスレで暴れてるんだよ

671:デフォルトの名無しさん
22/11/08 11:17:25.58 Z/fTsurM0.net
壊れちゃったんだろ

672:デフォルトの名無しさん
22/11/08 14:10:32.60 SId0EMb3a.net
ランダムに書き込んでるbotだよ

673:デフォルトの名無しさん
22/11/08 19:27:53.62 h+Zmgne00.net
有料と言ってもgoogleAPIってかなり安いと思うんだけど
手持ちの本数十冊OCRして1,000円いかなかった気がする

674:デフォルトの名無しさん
22/11/09 17:03:12.36 a7tugATP0.net
某有名ゲーム会社で働いてる友人が、「Pythonではあまりクラスを使うべきではない。
それほど高度なプログラムでなければ関数を使えばいい」と言っていたんですが、
そうなんでしょうか?
皆さんの意見を聞かせて頂きたいです

675:デフォルトの名無しさん
22/11/09 17:08:46.66 F89FAkjE0.net
関数でできればいいけど、引数たくさん渡したり、グローバル変数で渡してたり、
みたいな汚いことするくらいならクラスがいい

676:デフォルトの名無しさん
22/11/09 17:30:19.69 PaG6ZUsK0.net
Javaのようになんでもかんでもクラスを作る感じじゃないというのは事実。
でも、dataclassとかnamedtupleとかは使うかな。
とはいえやることによると思う。

677:デフォルトの名無しさん
22/11/09 17:30:52.94 ugvw1ns9a.net
状態を持つオブジェクトを扱うならクラスは必然なのでは

678:デフォルトの名無しさん
22/11/09 18:12:18.95 uDSXzENKM.net
pythonはメンバ変数にself必須なのがダルい
メインプログラムまでクラス化する必要はないと思う
規模が小さければモジュール変数をグローバル変数のように使うのが便利
vscodeならインテリセンス利くし

679:デフォルトの名無しさん
22/11/09 18:40:16.27 cOB3Ubn30.net
>>667
プログラム水準(?)の高低でなく、実行速度の遅速でそう


680:セわれるのを聞いたことはある。大昔ね。 事実かは知らぬ。



681:デフォルトの名無しさん
22/11/09 18:59:13.95 2JAkKfpeM.net
>>667
使うべきでない理由をなぜ聞かなかったのか?
それを書けば話は終わる
君の友人ほどスキルのある人はここにはいないからな

682:デフォルトの名無しさん
22/11/09 20:24:05.09 FPtq7UfL0.net
>>667
必要になるまで不要なもので汚すな
シンプルに書けってことかと

683:デフォルトの名無しさん
22/11/09 20:51:46.35 yZGUhxlRM.net
>>671
だなselfを二文字くらいの別名に出来ないのかな?

684:デフォルトの名無しさん
22/11/09 20:56:49.26 F89FAkjE0.net
perlから来たからselfは当たり前だと思ってる

685:デフォルトの名無しさん
22/11/09 21:06:27.04 EoOj57gu0.net
開発者間で同意取れるなら
ただの関数の引数だから好きに変えられはする

686:デフォルトの名無しさん
22/11/09 21:10:50.26 5c+x4O200.net
>>667
理由を示さないお作法は無視していい

687:デフォルトの名無しさん
22/11/09 21:21:40.38 uDSXzENKM.net
グローバル変数用のファイルを作ってas gでインポートってのをqiitaで見たけどかなり便利
g.nameみたいにアクセスする

688:デフォルトの名無しさん
22/11/09 21:30:42.42 F89FAkjE0.net
それは他に影響しないというだけで、グローバル変数の欠点は何も解決しない
作って使ってすぐ捨てるならいいけど、保守が必要なら時間かけてシンプルにしとかないと

689:デフォルトの名無しさん
22/11/09 21:48:48.07 dM0Gb0+w6.net
>>675
すればいいじゃん

690:デフォルトの名無しさん
22/11/09 21:57:03.34 uDSXzENKM.net
グローバル変数はプログラム全体を通した設定値とかに使うもんじゃない?
それこそメインプログラムにとってのselfよ
変に引数取りまくるより可読性高いと思う
規模にもよるんだろうけど

691:デフォルトの名無しさん
22/11/09 22:03:03.05 F89FAkjE0.net
configを読んでグローバルに格納してmain()を呼ぶ
みたいな作りになってるのが多い
うちのスクリプト

692:デフォルトの名無しさん
22/11/09 22:10:05.03 EoOj57gu0.net
設定値の保持ならぜんぜんOK
状態を丸見えで管理できないとこに置くなってことでしょ

693:デフォルトの名無しさん
22/11/09 22:13:24.86 F89FAkjE0.net
関数の中に下請け関数があって、
なんかごちゃごちゃしてきたからリファクタリングだと外に出したらスコープから外れたので、
じゃあみんなグローバル化したれ、みたいにglobal付けて誤魔化す

694:デフォルトの名無しさん
22/11/09 22:23:48.43 dM0Gb0+w6.net
せめてconst できればいいのに

695:デフォルトの名無しさん
22/11/09 23:03:08.26 a3eCQ+jX0.net
>>667
どうせ、いたずらにclassを多用したゴミトランプゲームを
見せたんだろ?いつまでも練習だからって言って、設計もしないで
ゴミコードを見せ続けるから嫌われかけてるんだよ。

696:デフォルトの名無しさん
22/11/10 00:21:13.04 8bOle1Do0.net
クラス化するのは、言語のタイプやプロジェクトの規模ではなくて
データ同士の相関を元に、見通しをよくすることが目的だと思う
あるいは自分用ライブラリとしてカプセル化しておきたいとか
そういう話を置いて、やらない方がいいレベルの問題があるのかw

697:デフォルトの名無しさん
22/11/10 00:21:46.71 a0I25TkAM.net
>>667
理由を示せないお作法は取るべきでない

698:デフォルトの名無しさん
22/11/10 00:24:11.32 KkTOa1Su0.net
>>667
おまいは友人に言われた事を何でも信じるのか?
この洗剤飲めるの。by アム・○○ぃ

699:デフォルトの名無しさん
22/11/10 00:27:36.22 OBeQnBIU0.net
匿名掲示板で聞いて得た答えを信じるというのもどうかと思う

700:687
22/11/10 00:32:26.74 ofaAiG0L0.net
レスしてくれた皆さんありがとうございます
参考にさせて頂きたいと思います
>>669
CUIの簡単なカードゲームではどうでしょうか?
>>673
失礼しました
曰く「クラスを下手に使わない方がコードが無駄に複雑にならなくてよい」
からだそうです
>>674
まさにそんな感じです
>>678
ちょっと彼に悪いかなって…
>>687
ゴミときたもんだ
彼の人柄はそんな感じじゃないよ

701:デフォルトの名無しさん
22/11/10 10:45:10.57 S46ME7RY0.net
ねえ、openpyxlとかでオンライン上のExcelファイルを修正できないの?

702:デフォルトの名無しさん
22/11/10 10:49:29.30 +lvrwnnZ0.net
どこかのクラウド(どこ?)に置いたファイルの意味なのか
Office365で作成したファイルなのか

703:デフォルトの名無しさん
22/11/10 11:02:13.25 ci7p4+PJa.net
どっちにしても手元に持ってこないと厳しいんじゃないかねえ

704:デフォルトの名無しさん
22/11/10 11:46:55.13 rDE3wZvsM.net
関数とクラス両方使えるのがpythonのメリットなのだから、常に適切な方を選べってことじゃないかと。

705:デフォルトの名無しさん
22/11/10 11:47:43.94 rDE3wZvsM.net
>>675
好きな名前をつけていいのよ。meとか

706:デフォルトの名無しさん
22/11/10 13:09:31.60 ci7p4+PJa.net
abcを使わないとできんことはあまりやりたくないねえ

707:デフォルトの名無しさん
22/11/10 13:26:04.03 tUNuHkwK0.net
abcは知ってても

708:デフォルトの名無しさん
22/11/10 13:50:13.84 99QPf7Vaa.net
>>696
> 関数とクラス両方使えるのがpythonのメリットなのだから、常に適切な方を選べってことじゃないかと。
なら初めからそう言えや
まあそう言われたら適切な方の決め方について小一時間は問い詰めたいけどなw

709:デフォルトの名無しさん
22/11/10 15:41:21.49 avJI0YX/0.net
>>693
teamsで出来るぞ

710:デフォルトの名無しさん (アウアウウー Sacd-obsI)
22/11/10 16:33:33.24 99QPf7Vaa.net
>>701
マジで?
やり方教えて

711:デフォルトの名無しさん (ワッチョイ 09f0-Z1Pq)
22/11/10 16:41:09.55 avJI0YX/0.net
>>702
teamsに申し込んでoffice365に申し込めばクラウド上でエクセルが使えます

712:デフォルトの名無しさん
22/11/10 17:38:31.76 aw2UCTg8M.net
>>692
カードゲームならカードクラスは作ったほうがよさそう。
あとはカードゲームのルールによる。

713:デフォルトの名無しさん
22/11/10 18:14:06.31 y5PDmjdo0.net
>>704
687が戒めたいのがまさに724みたいな馬鹿野郎なんだろうな。
目的と手段が入れ替わってclass考えて作るのに必死になる馬鹿。

714:デフォルトの名無しさん
22/11/10 18:34:12.90 RApG3JqD0.net
カードクラス作ってもいいけど、同じカードが存在しない、記号4つと数字1〜13の組み合わせの
ものにクラスがいちいちいるかな。
カードクラスはカード1枚を表して、なにができればいいんだ?
記号クラスがあって、各記号クラスがあって、ナンバークラスがあって、
is_MarkMatchとかis_NumberMatchとかもってんの?
idとprintがあればいいのかな。まあいいけど、そんだけのために
classいちいち用意するのめんどくない?
複数枚のカードを扱うcardsクラスなのかな?機能はいろいろ持てそうだけど
ゲーム固有すぎてどうなのかな?

715:デフォルトの名無しさん
22/11/10 19:12:07.27 /sng0JalM.net
可読性考えるとクラスのほうが良いわな
自分だけが使うなら好きに作ればいい

716:デフォルトの名無しさん
22/11/10 19:17:47.15 tUNuHkwK0.net
自分だけが使う場合でも後々困る
読みにくくていいのは再利用しないと判ってる場合

717:デフォルトの名無しさん
22/11/10 19:47:31.93 eS5awfmL0.net
>>705
689だが、トランプはクラスを作った方が(少なくともnamedtuple,dataclass)便利だと思うぞ
>>706
記号クラス、番号クラスなんて作らない
記号はenum、番号はそのまま1~13でいい
が、どの記号が黒だ赤だ、どの番号が絵柄か(JQKA)
みたいなのはたとえインスタンスが一個でもメソッドになってた方が便利だと思うけどなあ。
カードは内部表現とUI上の表現が異なるのが自然だし、そういう意味でもクラスにしておくのは悪くないと思うが
クラスにしすぎてもしょうがないというのは、ゲームのルールをクラスにして共通のインタフェース持たせて、バリエーションを切り替えられるようにしても大抵は仕方ないみたいなことだよ
もちろん、どんなゲームシステムを作るかによるし、ルールを共通インタフェースで入れ替えられるようにするメリットがある場合もあるけど

718:デフォルトの名無しさん
22/11/10 20:15:59.37 1wmpgP/ea.net
>>706
ちょっと発想が変だよ

719:デフォルトの名無しさん
22/11/10 20:18:11.54 TQxJo3Q4M.net
全てユースケース次第じゃね
13×4のブール配列で持っていたほうが都合がよい場合もあるだろうし

720:デフォルトの名無しさん
22/11/10 21:05:35.45 tUNuHkwK0.net
とりあえず作って、必要に応じてリファクタリングしていけばいい

721:デフォルトの名無しさん
22/11/10 22:35:47.17 SvDTIviz0.net
カード型のインスタンスを生成するデッキクラスを作りたいやん
deck.suffle()
hands = deck.draw(5)
みたいなさあ
あとは各ゲームで処理つくろ

722:デフォルトの名無しさん
22/11/10 22:41:30.18 tUNuHkwK0.net
カードのリストでよくね

723:687
22/11/10 23:28:06.08 ofaAiG0L0.net
多くのレスを頂き、ありがたく思います
ちょっと自己顕示欲が強い気もしますが、俺のGitHubを公開させて頂くので、
よろしければご覧下さい
URLリンク(github.com)
のblackjack_3.pyがそれです
これでもクラス使わないで書けるのかな…

724:デフォルトの名無しさん
22/11/11 00:15:20.89 ajyQllPs0.net
力作だね
友人のアドバイスは痛いほどよく分かる
クラス云々よりも「ここからメインの処理」以降の各処理を関数にまとめるほうがずっと大事だよ

725:デフォルトの名無しさん
22/11/11 00:21:32.63 gNt5qX/T0.net
1関数がでけえ
ということを言いたかったんだろう

726:デフォルトの名無しさん
22/11/11 00:23:24.86 Zi2NVkwv0.net
マサくん

727:デフォルトの名無しさん
22/11/11 00:52:49.95 5ErmYwLs0.net
何のためにでっかい関数の中にクラス作るのか分からん
この設計センスなら友人のアドバイスは正しいな

728:デフォルトの名無しさん
22/11/11 00:55:17.73 n0j9oGtca.net
blackjackで囲むのって意味あんのかね

729:687
22/11/11 01:14:49.41 9Wk/PRlY0.net
レスありがとうございます
>>688
クラス使った方が見通し良くなりますよね?
スッキリJavaにもそう書いてありました(Pythonの本ではないですが)
>>689
複雑にならない方がいいからだそうです
>>690
ええ、ですので皆さんの意見をお聞きしたんです
>>691
うーん、明らかにプロと思われる方の書き込みもありますし、
信じられるレスはあると思います
>>696
ただ彼の主張では、なるべくクラスは使うな、ということでした
Javaを独習した経験がある俺からすると、少し疑問符が付くのです

730:デフォルトの名無しさん
22/11/11 01:21:10.00 n0j9oGtca.net
クソクラスをクソと認識できるためにもそれなりの能力が要るからね

731:687
22/11/11 01:28:18.01 9Wk/PRlY0.net
>>704
そうですよね
カードのクラス作りました
>>706
複数枚のカードを持つCardクラスです
ブラックジャックなので、A・J・Q・Kの値は別に決める必要があります
>>707
可読性は重視したいです
>>716
そう言って頂けると大変ありがたいです
やっぱりそこは1つの関数にまとめた方がいいんですね
>>717-720
それも友人に、グローバル変数は少なければ少ないほどいい、と言われたのを
受けてのことです

732:デフォルトの名無しさん
22/11/11 01:39:45.03 tK9Svk7P0.net
>>715
ざっと見た感じ、そりゃ色々言われるわ
クラス云々言ってるのに、blackjackっていうデカい関数の中にクラス切ってる時点で吹いたわ
あとクラスの役割分担というか、所属してる関数もおかしく感じるわ
プレイヤークラスっていう名前なのに、にルール関係のスコア計算、バースト判定とかが入ってるし
それこそblackjackのルールを管理をするクラスを作る方が自然だべ
あともうし自分で書くとしたら、ルールクラスにis_winっていう関数作って、そこで勝利判定してtrue/falseで返すわ
最後に全パターンで人間/CPUに対して勝利判定かけてるけど、参加プレイヤー/CPUが増えた時の勝利判定の実装とか
これベースだと面倒だろうなって思った

733:デフォルトの名無しさん
22/11/11 01:43:33.89 tK9Svk7P0.net
>>723
>グローバル変数は少なければ少ないほどいい
これはまず変数のスコープは狭い方が良い、っていう話だぞ
(グローバル変数だとそれこそスコープが広くてどこで書き変わるのかが不明瞭になるから、なるべく使うなって言われてる)
バカデカい関数を作るって何の解決にもなってねえwwwwwww

734:デフォルトの名無しさん
22/11/11 05:10:58.43 dIH3TsNBM.net
使い回さないのに関数化やクラス化する意味ってあるんだろうか

735:デフォルトの名無しさん
22/11/11 06:45:32.82 fLgBQpEC0.net
is_<動詞> ってたまに見るけどどこかで流行ってるの?

736:デフォルトの名無しさん
22/11/11 07:35:28.77 BuWtLPbxM.net
>>726
この業界には、「一処理は100行に収めるべし」という格言があってな
つまり100行以上の処理があったら、100行以内にぶった切って関数にして順次呼ぶべしってことなんだよ
理由は知らん

737:デフォルトの名無しさん
22/11/11 08:51:38.78 QYmFVFm/a.net
まあ分割っていうか処理に名前つけろやって感じだな
抽象的に書こう

738:デフォルトの名無しさん (ワッチョイ 7247-GkOZ)
22/11/11 09:56:03.89 gNt5qX/T0.net
でかい関数はあれもやってこれもやってになってるから、
それを機能毎に分割すればいいだけ
1箇所からしか呼ばれない関数がいくつもできるけど、それは問題ない

うまく作ってあれば、関数の戻り値を次の関数に渡すだけ、みたいなシンプルな構造に自然となる
それぞれの機能が変数をいろいろ共有していて切り分けられなかったら、元々の書き方が悪い

739:デフォルトの名無しさん (ワッチョイ 927e-THRA)
22/11/11 10:26:37.58 XH1qJoq+0.net
pythonではクラスをあまり作らないほうがいい、じゃなくて
お前にクラスは百年早い、って言いたかったんだろその友人は。
碌に関数も作れないのだからクラスなんて無用の長物。

740:デフォルトの名無しさん (ワッチョイ 9263-zlm6)
22/11/11 10:31:34.23 PAETAgDl0.net
昔、関数ごとに仕様書作成が必要な現場があって、それを嫌って
ほとんどの関数が200行を超えるサイズで書かれる様になった

741:デフォルトの名無しさん (ワッチョイ 7247-GkOZ)
22/11/11 11:00:27.63 gNt5qX/T0.net
テストができんやろ

742:デフォルトの名無しさん (ワントンキン MM62-76so)
22/11/11 11:32:04.24 dIH3TsNBM.net
文書をアウトライン化するような感じで使うのね
メンテのときに不要な部分を読み飛ばせるのがメリットか

743:デフォルトの名無しさん (ワッチョイ 36a6-BGGY)
22/11/11 11:49:07.64 VSBKZoKf0.net
何か楽をするためのプログラムを作るのはいけるけど、
サイトの仕様変更で動かなくなったときの修正が苦痛だな、、
そのまま放置になりがち、、

744:デフォルトの名無しさん
22/11/11 11:59:14.38 gNt5qX/T0.net
スクレイピングはそのうち廃れる気がする
元データがあって人間用に加工して表示したものをまた元データに戻さなくても、
最初から元データで公開した方がお互い楽なことに気づき始めた

745:デフォルトの名無しさん
22/11/11 12:00:41.38 L/uUC/Rw0.net
C++でキー処理が数百行で、しかもファンクションキー毎に少しづつ違う
という構成のものを改修させれて辟易したことある
もしや、行数で成果が評価される現場だったのか

746:デフォルトの名無しさん
22/11/11 13:05:05.34 XH1qJoq+0.net
>>736
人間向けのHTMLを解析すれば無料なのにAPI経由は有料ってのも多いしな。

747:デフォルトの名無しさん
22/11/11 13:20:52.45 wT5HNNmtr.net
Python勉強してるけどどうやって初心者の粋を超えたらいいのかが分からない
何か作りたいけどその何かが思い浮かばないし
自動で巡回してエロビDLするとか電子書籍自動でスクショとかできるんだっけ?

748:デフォルトの名無しさん
22/11/11 13:23:31.34 RyfBFStrM.net
やってから聞けばいいのに

749:デフォルトの名無しさん
22/11/11 14:22:12.06 Pyb1B8zp0.net
>>739
早速思い浮かんでるじゃん
誰かができないと言うからやらないというなら何の勉強にもならない
明確な目的が無く勉強自体が目的なら機能しないゴミしか作れなくても意味があるし思い浮かんだもの全部作ればいい

750:デフォルトの名無しさん
22/11/11 14:23:36.91 JQ5LhQOs0.net
>>736
もしかして、APIが存在しない世界から来た方ですか?

751:デフォルトの名無しさん
22/11/11 14:29:46.62 JQ5LhQOs0.net
別に既にあるものでも構わないから、何か作りたいというモチベーションがある内に色んなものを作った方がいい
独学は特に大事

752:デフォルトの名無しさん
22/11/11 14:34:12.48 JQ5LhQOs0.net
途中で奥ちゃった
そしたら、次に何か新しいもの作りたくなった時に何が足りないか自分で調べられるぐらいにはなってると思う

753:デフォルトの名無しさん
22/11/11 15:20:48.12 KvbVlUc20.net
奥り人なんだな

754:デフォルトの名無しさん
22/11/11 19:48:45.92 acI+Bjnd0.net
クラスを設計するのはものすごく難しい
作り始めないとわからないことも多いし
途中で仕様が変わったりしたら
簡単に破綻する
大きなプロジェクトでは
途中でクラス構成を変えることは
困難なので
しばしば大変なことになる

755:デフォルトの名無しさん
22/11/11 21:01:39.50 BuWtLPbxM.net
>>739
この前も同じこと言ってる人がいたよ
作りたいものがないのでなんかアイディアないですかって
まず、何のためにPythonを勉強しているのか聞きたい
普通は作りたいものがあったり、仕事だから、課題だからという
動機があるはずなんだ
動機もなく身に着けられるものじゃないよ。プログラミングは一応専


756:門技能だから



757:デフォルトの名無しさん
22/11/11 21:43:58.80 zIrG+C10M.net
自分探しして働かない奴と同じだよな

758:デフォルトの名無しさん
22/11/11 21:51:56.55 7hjsWVqY0.net
>>746
最初から完璧な要件・設計で開発なんて不可能だから
途中で構成変わる前提で組み立てるんだよ
クラスに限った話じゃないけど

759:デフォルトの名無しさん
22/11/11 22:08:17.04 dIH3TsNBM.net
インスピレーションを得るなら多くの作品に触れることでしょ

760:デフォルトの名無しさん
22/11/11 22:16:07.93 PAETAgDl0.net
プログラムやりたいと思った動機ってそれぞれあるだろう

761:デフォルトの名無しさん
22/11/11 22:26:55.54 6yLWq/6IM.net
ズボラほど上達が早いように思う
やりたくないことは全部コンピュータにやらせたい

762:デフォルトの名無しさん
22/11/11 23:18:07.02 ywa4HP4la.net
現実は必死に努力してQiitaにちょっとやってみたーみたいなこと書いてるやつばっかりだけどな

763:デフォルトの名無しさん
22/11/11 23:19:39.80 ywa4HP4la.net
部品の置き換えが利くってのは完璧なプログラムとほとんど同義だね
具体的にねっちょりと書くしか無いこともあるけど

764:デフォルトの名無しさん
22/11/12 11:00:15.35 jZf8/3In0.net
質問です。
これをヘッドレスモードで動かしたいのですがどうするといいでしょうか?
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
browesr = webdriver.Chrome(ChromeDriverManager().install())

765:デフォルトの名無しさん (ワッチョイ 2389-UXd1)
22/11/12 11:41:37.67 jZf8/3In0.net
すいません。
解決しました。

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')
browesr = webdriver.Chrome(ChromeDriverManager().install(), options=options)
browesr.quit()

766:デフォルトの名無しさん
22/11/12 13:03:04.39 FJxDQgNh0.net
ちゃんと終わってる筈なのにタスクマネージャに残るんだよな

767:デフォルトの名無しさん
22/11/12 14:06:44.73 QoJFyqg+0.net
async関数の終了を2箇所で待つ方法は無いですか?
普通にawaitを2回使うと既にawaitedした処理だぜってエラーが出ます。

768:デフォルトの名無しさん
22/11/12 14:23:25.37 ToW7pe8/0.net
答えは持ち合わせてないけど同じことを考えたことあるな

769:デフォルトの名無しさん
22/11/12 14:24:45.91 T1+EK47n0.net
エラーなんか無視する


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

171日前に更新/241 KB
担当:undef