Pythonのお勉強 Part75 (966レス)
Pythonのお勉強 Part75 http://mevius.5ch.net/test/read.cgi/tech/1743698824/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
694: デフォルトの名無しさん (ワッチョイ de01-AJBo) [sage] 2025/08/10(日) 23:13:13.88 ID:ZpaHmpjx0 >>685 言語仕様はおろかプログラミングにおける代入を理解してないような初心者に対して代入文とはどういうものか説明しようとして「箱 = 値」というアナロジーを使ってるんでしょ? なのに説明できてない箇所を指摘すると「それは言語仕様を知ってればわかるからいいよね?文句ある?」みたいな開き直りをされても失笑するしかないよ http://mevius.5ch.net/test/read.cgi/tech/1743698824/694
695: デフォルトの名無しさん (ワッチョイ 232c-1ngM) [sage] 2025/08/10(日) 23:31:54.49 ID:wxvmtlzV0 >>694 646は、「言語仕様はおろかプログラミングにおける代入を理解してないような初心者に対して代入文とはどういうものか説明しようとして「箱 = 値」というアナロジーを使ってる」のかもしれないが、自分はそんなつもりは全くないな。652や656で書いたような説明をそんな初心者が理解できるわけないでしょ。Pytnonのような言語の代入文をきちんと理解するにはそれなりに前提知識がいる。それが大変だから、ラベル(名札・荷札)のアナロジーのような、そこそこ良い線はいっているけれども本質的な理解からは隔たりがある説明が蔓延しているわけで。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/695
696: デフォルトの名無しさん (ワッチョイ 174f-Fa+d) [] 2025/08/11(月) 10:30:52.65 ID:hg5eV/6v0 CPUはレジスタに根渡ししてるだけなのにな 高級言語は余計なことやりすぎなんだよ http://mevius.5ch.net/test/read.cgi/tech/1743698824/696
697: デフォルトの名無しさん (ワッチョイ 9a02-QbuV) [sage] 2025/08/11(月) 12:14:18.55 ID:oIjo7VRO0 AIを作ってるが、 Pythonは型が明記されてないから、わかりずらいな… C++のほうが見やすい http://mevius.5ch.net/test/read.cgi/tech/1743698824/697
698: デフォルトの名無しさん (ワッチョイ b680-kDJb) [] 2025/08/11(月) 12:23:50.21 ID:M47h2EOs0 正直俺もどうにかC++に持ってこれないか無駄な努力してる whisperとかはありがたい設計なんだけど翻訳系がなー boost::pythonもcythonも結構Cじゃ完結しないのね http://mevius.5ch.net/test/read.cgi/tech/1743698824/698
699: デフォルトの名無しさん (ワッチョイ 5a4e-a/Iv) [] 2025/08/11(月) 14:33:28.70 ID:uBk9CY7Y0 C++なら値なのか参照なのかポインタなのか一目で分かるからな 上の議論もc++なら一発で解決する http://mevius.5ch.net/test/read.cgi/tech/1743698824/699
700: デフォルトの名無しさん (ワッチョイ 0754-mJPu) [sage] 2025/08/11(月) 14:38:05.58 ID:Xx9EOjxc0 deepcopy必須な再帰呼び出しをリファクタリングしてたらすっきり書けすぎて、 deepcopy部分が暗黙になってしまって逆に危険に http://mevius.5ch.net/test/read.cgi/tech/1743698824/700
701: デフォルトの名無しさん (ワッチョイ 3e3e-ZDX3) [sage] 2025/08/12(火) 04:07:24.02 ID:nMX81I590 >>687 そうなんだけどさ 整数いくつ準備してんの あらかじめ http://mevius.5ch.net/test/read.cgi/tech/1743698824/701
702: デフォルトの名無しさん (ワッチョイ 4e10-1ngM) [sage] 2025/08/12(火) 08:04:19.47 ID:i9fPXIIb0 >>701 >>692 http://mevius.5ch.net/test/read.cgi/tech/1743698824/702
703: デフォルトの名無しさん (ワッチョイ df7c-J6sU) [] 2025/08/12(火) 09:10:49.53 ID:rnDCu4n50 >>697 型ヒントぐらい使え http://mevius.5ch.net/test/read.cgi/tech/1743698824/703
704: デフォルトの名無しさん (ワッチョイ 230f-1ngM) [sage] 2025/08/12(火) 09:28:38.40 ID:ob7DnR/R0 typingもバージョンアップのたびに機能が追加されるけれど、正直、フォローできているのは4分の1もないくらいかな。ある程度プラクティスが固まって本でも出たらそれに従うつもりではいるけれど、TypeGuardとかParamSpecとかを自分のコードで使うことはなさそう。 ヌル安全関係の演算子とかは、自分でも何とか理解できそうなので追加が可能なら欲しいかも。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/704
705: デフォルトの名無しさん (ワッチョイ 0754-mJPu) [sage] 2025/08/12(火) 09:32:25.25 ID:lkNbq5IJ0 全部書いて自動チェック機能も常用しないと意味がない 必要なとこだけコメントで十分 http://mevius.5ch.net/test/read.cgi/tech/1743698824/705
706: デフォルトの名無しさん (ワッチョイ f6c1-1ngM) [sage] 2025/08/12(火) 09:59:58.99 ID:46uwwH/J0 たとえばlistにリスト型宣言時に想定されていた要素型の部分型のオブジェクトを要素として入れたりすると、listは共変じゃないから型の互換性がないぞって警告が出たりするけど、そういうのにどこまで対応するのがいいのかってのがよく分からない。castして黙らせるのがいいのか、そういうものだと放置しておくのがいいのか。どちらにせよ、型ヒントを書かないコードと比べて可読性の低下に見合うメリットがあるのか。 基本的には型付けしていく方向性の方が良いんだろうなと思っているけど、今一つ自分のスタンスが固まり切らない感じ。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/706
707: デフォルトの名無しさん (ワッチョイ 0754-mJPu) [sage] 2025/08/12(火) 10:10:27.36 ID:lkNbq5IJ0 型は決めずにいろいろ受け付けて、 想定外のが来ても意外とちゃんと動く、みたいなのがオブジェクト指向 http://mevius.5ch.net/test/read.cgi/tech/1743698824/707
708: デフォルトの名無しさん (ワッチョイ f6c1-1ngM) [sage] 2025/08/12(火) 10:18:49.37 ID:46uwwH/J0 705と707は、方向性としては正反対なのでは。707はいわゆるダックタイピングのことだと思うけど、オブジェクト指向は静的型付けとも両立するよね。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/708
709: デフォルトの名無しさん (ワッチョイ 0754-mJPu) [sage] 2025/08/12(火) 10:23:41.12 ID:lkNbq5IJ0 型を混同するとバグる箇所と、 意図的に型を限定しない箇所がある 混同に該当するようなことをしても、柔軟に書かれてて期待通りに動いたりもする 厳密に追えば正しく動く理由は説明できるけど、 全部隠蔽して直感的に読めるコードだけが残る http://mevius.5ch.net/test/read.cgi/tech/1743698824/709
710: デフォルトの名無しさん (ワッチョイ 5b2a-ycC0) [] 2025/08/12(火) 10:36:41.15 ID:JQsdcePx0 >>707 なんか古めかしいよね。 型は決めずに void 型ポインタとしていろいろ受け付けるみたいな。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/710
711: デフォルトの名無しさん (ワッチョイ f6c1-1ngM) [sage] 2025/08/12(火) 10:36:56.04 ID:46uwwH/J0 静的型チェッカーは、onにすると基本的には全コードについて型チェックをするものだと思っていたけど、そこは型チェッカーの設定次第で調整できるのかな。あとはAny……。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/711
712: デフォルトの名無しさん (ワッチョイ 2398-a/Iv) [] 2025/08/12(火) 10:46:31.63 ID:Gkg/fED60 typescriptみたいに型システムを追加したPythonのスーパーセット作ればいいんだよ http://mevius.5ch.net/test/read.cgi/tech/1743698824/712
713: デフォルトの名無しさん (ワッチョイ de01-/C6k) [sage] 2025/08/12(火) 10:54:42.31 ID:ANRO+El50 >>706 Protocol使う場面では? structual typingでよければだけど http://mevius.5ch.net/test/read.cgi/tech/1743698824/713
714: デフォルトの名無しさん (ワッチョイ 0754-mJPu) [sage] 2025/08/12(火) 11:00:43.17 ID:lkNbq5IJ0 人間の管理能力は限界があるので、 人間側が間違わずに作るんじゃなくて、 最低限のことしか考えなくても安全に動作する方向に進化している 全員でそれをやると進まないので、 一部の頭いい人だけC言語でかっちり作る両輪体制 http://mevius.5ch.net/test/read.cgi/tech/1743698824/714
715: デフォルトの名無しさん (ワッチョイ f6c1-1ngM) [sage] 2025/08/12(火) 11:10:42.61 ID:46uwwH/J0 >>713 ProtocolについてはロバストPytnonに出てきたのをちょっと読んだくらいしか知識がないのだけど、こういうときに使えるものなのかな。: list[base] という型指定はライブラリの中でされていて書き換えるのは躊躇されるので、そうだとするとちょっと難しいのかなと。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/715
716: デフォルトの名無しさん (ワッチョイ cb01-/C6k) [sage] 2025/08/12(火) 13:23:41.67 ID:AyHSyTNk0 >>715 それはライブラリ側の型ヒントが間違ってるか 自分が入れようとしている要素の型が間違ってるか どちらかじゃないの? ライブラリ側の型ヒントが間違ってると確定できてないうちは 自分が間違ってる前提で対応したほうがいいように思う http://mevius.5ch.net/test/read.cgi/tech/1743698824/716
717: デフォルトの名無しさん (ワッチョイ f641-1ngM) [sage] 2025/08/12(火) 14:21:56.81 ID:46uwwH/J0 GUIライブラリのwidgetコンテナで、格納される具体的なwidget群を属性widgeds : list[widget] に受け取るみたいな感じなんだよね。 container.widgets = [ label(), button(), textbox(), …… ] (label, button, textbox等は全てwidgetの部分型)みたいな感じで配置するんだけど、そこで706みたいな警告が出たり出なかったりする。 ありがちな状況なので、たぶん定石的な対処方法があるんじゃないかと思うんだけど。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/717
718: デフォルトの名無しさん (ワッチョイ df01-/C6k) [sage] 2025/08/12(火) 15:24:09.75 ID:PiEjVoIs0 >>717 list[widget]の型にwidgetのサブクラスのインスタンスを入れてもエラーにはならないはず list[widget]の型が要求されている箇所にlist[label]型の変数を渡してるとかなのでは? http://mevius.5ch.net/test/read.cgi/tech/1743698824/718
719: デフォルトの名無しさん (ワッチョイ f641-1ngM) [sage] 2025/08/12(火) 15:45:42.19 ID:46uwwH/J0 Pytnonの型チェックはあくまでもヒントだからエラーというか警告だけどね。自分も比較的最近知ったことだから勘違いがあるかもしれないけれど、listはmutableコンテナだから共変ではないんだって。だから、A <: B(Bが上位型でAはその部分型)のときでもlist[A] <: list[B] にはならないらしいよ。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/719
720: デフォルトの名無しさん (ワッチョイ f641-1ngM) [sage] 2025/08/12(火) 16:10:13.74 ID:46uwwH/J0 たしかにlistの要素として、その型宣言時の要素型のサブクラスのインスタンスを入れるだけなら特に問題ないはずだとは自分も思うんだよね。 717のcontainer.widgets = [ label(), button(), textbox(), …… ] は、両辺の式の型の間に互換性がない(listは非変なので)点に問題があるということだとすると、container.widget.extend( …… ) とかの書き方にしたら大丈夫なんだろうか。ライブラリのリファレンスとかにはそういう書き方は出てこなかったけど。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/720
721: デフォルトの名無しさん (ワッチョイ df01-/C6k) [sage] 2025/08/12(火) 16:18:25.12 ID:PiEjVoIs0 >>719 型チェッカーがエラーと報告するならエラーでいいよ listが共変でないというのは要素型のサブクラスはlistに入れられない話ではない これはNG mylist: list[label] = [label] widgets = mylist これはOK widgets = [label] これもOK widgets = [label, button, textbox] http://mevius.5ch.net/test/read.cgi/tech/1743698824/721
722: デフォルトの名無しさん (ワッチョイ df01-/C6k) [sage] 2025/08/12(火) 16:34:38.20 ID:PiEjVoIs0 OKなはずなのにエラーが出てるのなら最小限の再現コードをpyrightのplaygroundにでも上げてもらったほうがいいかもね http://mevius.5ch.net/test/read.cgi/tech/1743698824/722
723: デフォルトの名無しさん (ワッチョイ f641-1ngM) [sage] 2025/08/12(火) 16:57:06.52 ID:46uwwH/J0 なるほど、たしかにそれだと警告は出ないね。短い再現コードが出せるようならやってみるけどちょっと難しそうかな。たぶん代入文の右辺について、型チェッカーが(list[widget]と互換性のない)型情報をコード内の別のところから得ちゃっているということなんだろうと思うけど。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/723
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 243 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.014s