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