Pythonのお勉強 Part75 (961レス)
上下前次1-新
677(1): (ワッチョイ f64c-1ngM) 08/10(日)16:46 ID:wmWYPlFf0(5/9) AAS
Pytnonの言語仕様として「代入文」という名称で規定されているんだから、ひとまずこのスレで「代入」と呼ぶことには何の問題もないと思うけどね。それが数学における代入概念とは意味が違うから別の呼び方をすべきだというのは1つの意見としては傾聴に値すると思うけど、それはまた別の話でしょ。
>>673
それは661でコンテキスト(状況)として挙げられた要素に対応する違いであるか甚だ疑問だし、そもそも「箱を箱の中身が示す値として取り扱う」というようなふわっとした理解だから混乱するのでは。
大前提として、①名前と②名前が束縛されるメモリ領域(=箱)とは区別される概念だけどこれはいい? それから、②名前が束縛されるメモリ領域(=箱)と③そこに格納されている実体(オブジェクト・値)も区別される概念だけどこっちはいいよね。たぶん、①②の区別が曖昧だから「箱を箱の中身が示す値として取り扱う」というような表現が出てくるんだと思うけど。
注意すべきは「変数」という用語の多義性で、この語は上記①〜③のいずれを指すか曖昧なまま使われがち。かつそういう曖昧な認識のまま「変数=箱」という説明がされがちなので混乱が起きるんだと思うけどね。なお、そういう観点からいうと、646の「箱=値」という表記の仕方も(直感的にはわかりやすいけれども)こういう曖昧な理解を助長する弊害はあるんだろう。
上記のような概念的な区別がきちんとできている限り、コンテキスト(状況)如何で変わるような話ではないということは理解しやすいと思うけどどうかな(あるいは、必要なのは概念的な区別であって、コンテキスト(状況)の場合分けではないという言い方をしても良い)。
678: (ワッチョイ 7a0a-WVpU) 08/10(日)17:03 ID:swuUdv2c0(5/11) AAS
箱は伝統的なプログラミング入門書が使うわかりにくい例えだしな
それより丸数字の使用が気になるぞ
679: (ワッチョイ 7a0a-WVpU) 08/10(日)17:11 ID:swuUdv2c0(6/11) AAS
ドキュメンテーションのない仕事をしているのがはっきりとわかるよなあ
680: (ワッチョイ f64c-1ngM) 08/10(日)17:15 ID:wmWYPlFf0(6/9) AAS
メモリ領域を箱に例えるのはコンピューターのアーキテクチャーに忠実な良い例えだと思うけどね。Pytnonみたいな言語ではC言語レベルに還元しないと正確な理解に到達できないという憾みはあるが、それでもラベル(名札・荷札)のアナロジーのような曖昧なイメージに頼るよりよほど良いと思うよ。
ところで、丸数字って今でも読みづらく化けたりする? 5chみたいなところで使う分には、もう、そんなに気にしなくても良い時代かなと思っていたんだが。
681: (ワッチョイ 0754-mJPu) 08/10(日)17:20 ID:rGiN2SBN0(9/10) AAS
一番気になるのは改行しないことだな
682(2): (ワッチョイ 7601-AJBo) 08/10(日)18:04 ID:BWOE9N0b0(3/3) AAS
>>677
>>652から引用すると「y = x は(C言語レベルでは)名前(変数)yが束縛されているメモリ領域(646風にいえばyという箱)にオブジェクト"foo"のアドレス情報を入れるという形で処理されることになる。」
ここでは何の説明もなくxが「オブジェクトfoo"のアドレス情報」に変換されてるよね?
同じxでも直前の`x=“foo”`のxは箱のまま入れ物として取り扱われていたが
`y = x`のxは箱の中身が指し示す値として取り扱われている
その違いを生むのがxが評価されるコンテキストの違い
683: (ワッチョイ 7a0a-WVpU) 08/10(日)18:34 ID:swuUdv2c0(7/11) AAS
アセンブラのニーモニックが辞書を片手に見るか、覚えていないといけないのをわかりやすく表現しただけのものをマシン語の並び順すら知らずにこねくり回した説明をしているのは滑稽
684: (ワッチョイ 7a0a-WVpU) 08/10(日)18:45 ID:swuUdv2c0(8/11) AAS
>>682
CPUのレジスタがメモリのような連続した長いものでないため、コンピューターではレジスタで収まるものとそうでないものの区別がある。
コンピューターそのものがCPUとメモリという別のものを組み合わせているから、メモリへの参照なのかどうかは曖昧にしたまま進化しただけ。
685(2): (ワッチョイ f64c-1ngM) 08/10(日)19:11 ID:wmWYPlFf0(7/9) AAS
>>682
何の説明もなくって、代入文の右辺の式が評価されるのは代入文の言語仕様そのままでしょ。何か不明確な点ってある?
代入文の左辺か右辺かの違いもコンテキスト(状況)の違いであって、そのいずれであるかによって言語処理系による名前(変数)の扱いが異なるという趣旨のことを主張したいのなら別に積極的に異論をとなえるつもりもないけれども、それについて、Pytnonの言語リファレンス等で明らかになっていることに付け加えて何か説明しなきゃいけないことってあるかな?
「箱自体を値として使う場合」(648)とか「箱を箱の中身が示す値として使う状況」(673)というのは概念上の区別が不十分であることに基づく不正確な表現・理解だと思うけど、その点が正された後になお何か理解できない点があるの?
686(1): (ワッチョイ 3e5f-ZDX3) 08/10(日)19:30 ID:EbzyEcBr0(1) AAS
2のオブジェクトがあって
x=2だとxは2のオブジェクトを参照?
オブジェクトどんだけ先に用意すんの?
687(1): (ワッチョイ 7a0a-WVpU) 08/10(日)19:32 ID:swuUdv2c0(9/11) AAS
>>686
コードに2と書いてある時点で、2もメモリ上に存在しているんだよ?
688: (ワッチョイ 7a0a-WVpU) 08/10(日)19:32 ID:swuUdv2c0(10/11) AAS
>>685 はただの老害
689: (ワッチョイ f64c-1ngM) 08/10(日)19:35 ID:wmWYPlFf0(8/9) AAS
2がオブジェクトであることは print( id( 2 ) ) とかしてみれば分かる。
よく使う整数はあらかじめ生成しているんじゃなかったっけ。どの範囲かは以前このスレで見たような気がするが忘れちゃった。
690: (ワッチョイ 0754-mJPu) 08/10(日)19:36 ID:rGiN2SBN0(10/10) AAS
数値もオブジェクトと知った時点でその疑問に行き当たるよな
文字列がオブジェクトなのは、文字列自体が格納されたアドレスだから普通に判る
数値は整数どころか浮動小数点数でもオブジェクトで、事前に用意したら無限に要る
単にオブジェクトは必ずしもアドレスじゃなくて、数値をbit表記したものが渡されるだけ
691: (ワッチョイ f64c-1ngM) 08/10(日)19:48 ID:wmWYPlFf0(9/9) AAS
RubyとかJavaScriptと違ってPytnonは即値を使わず全部PyObjectじゃなかったっけ? 正直、記憶が曖昧なので自信はないが。
692(1): (ワッチョイ 1a79-MCtg) 08/10(日)20:18 ID:WEeWhG2x0(1) AAS
このあたりの話かな
外部リンク[html]:docs.python.org
PyObject *PyLong_FromLong(long v)
戻り値: 新しい参照。 次に属します: Stable ABI.
v から新たな PyLongObject オブジェクトを生成して返します。失敗のときには NULL を返します。
現在の実装では、-5 から 256 までの全ての整数に対する整数オブジェクトの配列を保持します。この範囲の数を生成すると、実際には既存のオブジェクトに対する参照が返るようになっています。
693: (ワッチョイ 7a0a-WVpU) 08/10(日)21:54 ID:swuUdv2c0(11/11) AAS
Pythonは後になって「オブジェクト」という用語を使い始めた誤魔化し集団。
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して黙らせるのがいいのか、そういうものだと放置しておくのがいいのか。どちらにせよ、型ヒントを書かないコードと比べて可読性の低下に見合うメリットがあるのか。
基本的には型付けしていく方向性の方が良いんだろうなと思っているけど、今一つ自分のスタンスが固まり切らない感じ。
上下前次1-新書関写板覧索設栞歴
あと 255 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.022s