Pythonのお勉強 Part75 (969レス)
Pythonのお勉強 Part75 http://mevius.5ch.net/test/read.cgi/tech/1743698824/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
663: デフォルトの名無しさん (ワッチョイ 0754-mJPu) [sage] 2025/08/10(日) 13:01:51.64 ID:rGiN2SBN0 x = x + 1 の処理毎に加算されていく、というカウンタ動作は、 数列の漸化式というよりは、z^(-1)みたいな離散時間で捉えると動作とよく合う http://mevius.5ch.net/test/read.cgi/tech/1743698824/663
664: デフォルトの名無しさん (ワッチョイ 7a0a-WVpU) [] 2025/08/10(日) 13:03:29.02 ID:swuUdv2c0 >>662 数学だと正確にはその例でも左辺と右辺はイコールという意味だ http://mevius.5ch.net/test/read.cgi/tech/1743698824/664
665: デフォルトの名無しさん (ワッチョイ 0754-mJPu) [sage] 2025/08/10(日) 13:08:38.63 ID:rGiN2SBN0 代入(assign)は割り当てと同じ意味で、何かを別のもので置き換える y = x + 1 なら何も困らない x = x + 1 は割り当てではなくて関係式(equation)になって、xは未知数 そして解けない http://mevius.5ch.net/test/read.cgi/tech/1743698824/665
666: デフォルトの名無しさん (ワッチョイ f6ce-1ngM) [sage] 2025/08/10(日) 13:22:53.03 ID:wmWYPlFf0 >>657 コレクション・コンテナを理解するためには、ラベル(名札)のアナロジーによらない方が正確に理解できるし、コレクション・コンテナの重要性を考えるとそれは致命的な弱点だと思うけどね。たとえば、tupleのimmutabilityに関してtupleオブジェクトの要素であるlistの要素に変更があってもそれはtupleのimmutabilityには反しないということを学ぶけど、それは内部実装のイメージがないとわかりにくいと思うよ。 初めのうちから内部実装をベースに理解しようとするのはたしかにムリがあるけれども、ラベル(名札)のアナロジーによる説明は所詮小手先の誤魔化しに過ぎないので、どこかの段階で内部実装に基づく(といっても大したレベルではなく、C言語のポインタの概念の基本を知っていれば足りるレベル)理解に切り替えた方が良いと思うけどね。 >>661 自分は、代入構文の説明としては、結局は箱のイメージで説明するのが(主にラベル(名札)のアナロジーによる説明との比較で)ベターではないかと考えているので、その点では646にも近い立場だけど、それがシンプルに理解できるとは微塵も考えていない。箱に格納されるのはアドレス情報であってそれ自体としてはPytnonのオブジェクトではないし、C言語レベルの内部実装に関する知識に依拠した説明になるからね。647に書いたとおり、本来的には(C言語レベルでは)比較的シンプルなはずのアイデアが、Pytnonでは(仕方のないことではあるけれども)屈折した表れ方になるなぁと思っている。 なお、「コンテキスト(状況)」という語をどういう趣旨で使いたかったのかというのは分かったけど、652に対する批判の文脈でどういう意味合いを持たせたかったのかはよく分からないな。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/666
667: デフォルトの名無しさん (ワッチョイ 1af4-ZDX3) [sage] 2025/08/10(日) 13:25:39.30 ID:WyYSCohm0 >>659 わかってないな、コピーしなくていいんだよ x = A() # Aの実体をどこかに作成し、荷札xを貼り付ける y = x # xが貼り付けられている実体に追加で荷札yを貼り付ける 辻褄は合うだろう? http://mevius.5ch.net/test/read.cgi/tech/1743698824/667
668: デフォルトの名無しさん (ワッチョイ 0754-mJPu) [sage] 2025/08/10(日) 13:45:18.60 ID:rGiN2SBN0 荷札という名称が悪すぎるわw 実体の所有者(複数可)が誰か判るような管理リスト、みたいなイメージ 実際にはリストじゃないからこの時点で乖離があるけど 登記簿とか株券の裏を複数所有可能にした的な 所有してる訳でもないのでズレる なんで「参照」の一言を参照使わずに説明するのがこんなに困難なのか http://mevius.5ch.net/test/read.cgi/tech/1743698824/668
669: デフォルトの名無しさん (ワッチョイ 1af2-ZDX3) [sage] 2025/08/10(日) 14:04:35.99 ID:WyYSCohm0 >>666 t = (x, y) u = t これは、荷札xの付いた実体に対して荷札t[0]を、荷札yの実体に対して同様に荷札t[1]を貼り付ける、 同時に、荷札t[0]とt[1]を管理するために”t[0], t[1]”と書かれた台帳を作成し、その台帳に荷札uを付けると解釈すればよい これは参照の向きを逆に捉えて参照される側が参照元を記憶していると考えているだけなので、基本的にはこのような説明で矛盾は生じない 荷札名から実体を探すのが大変だという問題は残るけどね http://mevius.5ch.net/test/read.cgi/tech/1743698824/669
670: デフォルトの名無しさん (ワッチョイ f6ce-1ngM) [sage] 2025/08/10(日) 14:29:10.70 ID:wmWYPlFf0 仮にそれをそのまま実装に反映させるなら、Pytnonオブジェクトに(被参照カウント数に加えて)参照元のリストも持たせるってことでしょ。 そうではなく、単に解釈モデルに過ぎないってことなら、内部実装がそうなっているわけでもないのに、あえてそんな不自然な解釈モデルを作ってまで荷札(ラベル・名札)のアナロジーに拘る意味ってあるのかな? たとえばそれで、(666でちょっと触れた)tupleの要素であるlistの要素を変更してもtupleのimmutabilityに反しないことの説明がしやすくなったりする? http://mevius.5ch.net/test/read.cgi/tech/1743698824/670
671: デフォルトの名無しさん (ワッチョイ 7601-AJBo) [sage] 2025/08/10(日) 15:10:39.92 ID:BWOE9N0b0 >>664, 665 y = x + 1なら「yにx + 1を割り当てる」「yをx + 1で置き換える」 x = x + 1なら「xにx + 1を割り当てる」「xをx + 1で置き換える」 で特に困らないと思うんだけど 数学の場合は変数が指し示す値が同じスコープ内で変化しない大前提があるからそれを元に「代入」を考えると「xにx+1を代入する」がおかしいという感覚になるのでは? それともイコールじゃなくて「x ← x + 1」なら←は代入ですと言ってもしっくりくるのかな? http://mevius.5ch.net/test/read.cgi/tech/1743698824/671
672: デフォルトの名無しさん (ワッチョイ 7a0a-WVpU) [] 2025/08/10(日) 15:49:18.97 ID:swuUdv2c0 >>671 だから:=にしているプログラミング言語もある 私は「代入」という言葉を否定している人間だ。 「代入」は数学の記法の見た目と同じだから出てきた言い回しにすぎない。 仕事では「設定」などと呼ぶ。英語でもsetと呼んでいる。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/672
673: デフォルトの名無しさん (ワッチョイ 7601-AJBo) [sage] 2025/08/10(日) 15:53:58.39 ID:BWOE9N0b0 >>666 >652に対する批判の文脈でどういう意味合いを持たせたかったのかはよく分からないな >>648に書いてるのと同じなんだけど箱を箱のまま入れ物として取り扱う状況と箱を箱の中身が示す値として取り扱う状況の説明なくそれらを無意識に使い分けながら「一貫した説明ができる」と言ってるのを自覚して欲しかったとでも言えばいいだろうか http://mevius.5ch.net/test/read.cgi/tech/1743698824/673
674: デフォルトの名無しさん (ワッチョイ 0754-mJPu) [sage] 2025/08/10(日) 15:57:29.66 ID:rGiN2SBN0 代入という訳語の気が利きすぎてるんだよな assignのニュアンスそのままなら代入は出てこない 単に関連付けをしてるだけ 代わりに入れるという何か動きを持った訳語にしたせいで、逆に理解を阻害する http://mevius.5ch.net/test/read.cgi/tech/1743698824/674
675: デフォルトの名無しさん (ベーイモ MM06-ZDX3) [sage] 2025/08/10(日) 16:00:48.44 ID:VcYsNhlgM >>672 setには、ある既存の構造を正しく整った状態へと変えるというニュアンスがある 単なる変数の代入は変数の中身をまるっと置き換えているだけで既存の構造を変化させているわけではないし、 新しい値もそれが正しく整ったものとは限らず、ごく一時的なものだったりする なのでより直接的なassignが用いられる http://mevius.5ch.net/test/read.cgi/tech/1743698824/675
676: デフォルトの名無しさん (ワッチョイ 7a0a-WVpU) [] 2025/08/10(日) 16:14:57.79 ID:swuUdv2c0 >>675 Pythonの話なら私は知らない。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/676
677: デフォルトの名無しさん (ワッチョイ f64c-1ngM) [sage] 2025/08/10(日) 16:46:12.05 ID:wmWYPlFf0 Pytnonの言語仕様として「代入文」という名称で規定されているんだから、ひとまずこのスレで「代入」と呼ぶことには何の問題もないと思うけどね。それが数学における代入概念とは意味が違うから別の呼び方をすべきだというのは1つの意見としては傾聴に値すると思うけど、それはまた別の話でしょ。 >>673 それは661でコンテキスト(状況)として挙げられた要素に対応する違いであるか甚だ疑問だし、そもそも「箱を箱の中身が示す値として取り扱う」というようなふわっとした理解だから混乱するのでは。 大前提として、①名前と②名前が束縛されるメモリ領域(=箱)とは区別される概念だけどこれはいい? それから、②名前が束縛されるメモリ領域(=箱)と③そこに格納されている実体(オブジェクト・値)も区別される概念だけどこっちはいいよね。たぶん、①②の区別が曖昧だから「箱を箱の中身が示す値として取り扱う」というような表現が出てくるんだと思うけど。 注意すべきは「変数」という用語の多義性で、この語は上記①〜③のいずれを指すか曖昧なまま使われがち。かつそういう曖昧な認識のまま「変数=箱」という説明がされがちなので混乱が起きるんだと思うけどね。なお、そういう観点からいうと、646の「箱=値」という表記の仕方も(直感的にはわかりやすいけれども)こういう曖昧な理解を助長する弊害はあるんだろう。 上記のような概念的な区別がきちんとできている限り、コンテキスト(状況)如何で変わるような話ではないということは理解しやすいと思うけどどうかな(あるいは、必要なのは概念的な区別であって、コンテキスト(状況)の場合分けではないという言い方をしても良い)。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/677
678: デフォルトの名無しさん (ワッチョイ 7a0a-WVpU) [] 2025/08/10(日) 17:03:01.76 ID:swuUdv2c0 箱は伝統的なプログラミング入門書が使うわかりにくい例えだしな それより丸数字の使用が気になるぞ http://mevius.5ch.net/test/read.cgi/tech/1743698824/678
679: デフォルトの名無しさん (ワッチョイ 7a0a-WVpU) [] 2025/08/10(日) 17:11:26.30 ID:swuUdv2c0 ドキュメンテーションのない仕事をしているのがはっきりとわかるよなあ http://mevius.5ch.net/test/read.cgi/tech/1743698824/679
680: デフォルトの名無しさん (ワッチョイ f64c-1ngM) [sage] 2025/08/10(日) 17:15:06.72 ID:wmWYPlFf0 メモリ領域を箱に例えるのはコンピューターのアーキテクチャーに忠実な良い例えだと思うけどね。Pytnonみたいな言語ではC言語レベルに還元しないと正確な理解に到達できないという憾みはあるが、それでもラベル(名札・荷札)のアナロジーのような曖昧なイメージに頼るよりよほど良いと思うよ。 ところで、丸数字って今でも読みづらく化けたりする? 5chみたいなところで使う分には、もう、そんなに気にしなくても良い時代かなと思っていたんだが。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/680
681: デフォルトの名無しさん (ワッチョイ 0754-mJPu) [sage] 2025/08/10(日) 17:20:18.25 ID:rGiN2SBN0 一番気になるのは改行しないことだな http://mevius.5ch.net/test/read.cgi/tech/1743698824/681
682: デフォルトの名無しさん (ワッチョイ 7601-AJBo) [sage] 2025/08/10(日) 18:04:10.77 ID:BWOE9N0b0 >>677 >>652から引用すると「y = x は(C言語レベルでは)名前(変数)yが束縛されているメモリ領域(646風にいえばyという箱)にオブジェクト"foo"のアドレス情報を入れるという形で処理されることになる。」 ここでは何の説明もなくxが「オブジェクトfoo"のアドレス情報」に変換されてるよね? 同じxでも直前の`x=“foo”`のxは箱のまま入れ物として取り扱われていたが `y = x`のxは箱の中身が指し示す値として取り扱われている その違いを生むのがxが評価されるコンテキストの違い http://mevius.5ch.net/test/read.cgi/tech/1743698824/682
683: デフォルトの名無しさん (ワッチョイ 7a0a-WVpU) [] 2025/08/10(日) 18:34:46.42 ID:swuUdv2c0 アセンブラのニーモニックが辞書を片手に見るか、覚えていないといけないのをわかりやすく表現しただけのものをマシン語の並び順すら知らずにこねくり回した説明をしているのは滑稽 http://mevius.5ch.net/test/read.cgi/tech/1743698824/683
684: デフォルトの名無しさん (ワッチョイ 7a0a-WVpU) [] 2025/08/10(日) 18:45:58.86 ID:swuUdv2c0 >>682 CPUのレジスタがメモリのような連続した長いものでないため、コンピューターではレジスタで収まるものとそうでないものの区別がある。 コンピューターそのものがCPUとメモリという別のものを組み合わせているから、メモリへの参照なのかどうかは曖昧にしたまま進化しただけ。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/684
685: デフォルトの名無しさん (ワッチョイ f64c-1ngM) [sage] 2025/08/10(日) 19:11:26.73 ID:wmWYPlFf0 >>682 何の説明もなくって、代入文の右辺の式が評価されるのは代入文の言語仕様そのままでしょ。何か不明確な点ってある? 代入文の左辺か右辺かの違いもコンテキスト(状況)の違いであって、そのいずれであるかによって言語処理系による名前(変数)の扱いが異なるという趣旨のことを主張したいのなら別に積極的に異論をとなえるつもりもないけれども、それについて、Pytnonの言語リファレンス等で明らかになっていることに付け加えて何か説明しなきゃいけないことってあるかな? 「箱自体を値として使う場合」(648)とか「箱を箱の中身が示す値として使う状況」(673)というのは概念上の区別が不十分であることに基づく不正確な表現・理解だと思うけど、その点が正された後になお何か理解できない点があるの? http://mevius.5ch.net/test/read.cgi/tech/1743698824/685
686: デフォルトの名無しさん (ワッチョイ 3e5f-ZDX3) [sage] 2025/08/10(日) 19:30:23.90 ID:EbzyEcBr0 2のオブジェクトがあって x=2だとxは2のオブジェクトを参照? オブジェクトどんだけ先に用意すんの? http://mevius.5ch.net/test/read.cgi/tech/1743698824/686
687: デフォルトの名無しさん (ワッチョイ 7a0a-WVpU) [] 2025/08/10(日) 19:32:17.91 ID:swuUdv2c0 >>686 コードに2と書いてある時点で、2もメモリ上に存在しているんだよ? http://mevius.5ch.net/test/read.cgi/tech/1743698824/687
688: デフォルトの名無しさん (ワッチョイ 7a0a-WVpU) [] 2025/08/10(日) 19:32:51.39 ID:swuUdv2c0 >>685 はただの老害 http://mevius.5ch.net/test/read.cgi/tech/1743698824/688
689: デフォルトの名無しさん (ワッチョイ f64c-1ngM) [sage] 2025/08/10(日) 19:35:35.63 ID:wmWYPlFf0 2がオブジェクトであることは print( id( 2 ) ) とかしてみれば分かる。 よく使う整数はあらかじめ生成しているんじゃなかったっけ。どの範囲かは以前このスレで見たような気がするが忘れちゃった。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/689
690: デフォルトの名無しさん (ワッチョイ 0754-mJPu) [sage] 2025/08/10(日) 19:36:05.96 ID:rGiN2SBN0 数値もオブジェクトと知った時点でその疑問に行き当たるよな 文字列がオブジェクトなのは、文字列自体が格納されたアドレスだから普通に判る 数値は整数どころか浮動小数点数でもオブジェクトで、事前に用意したら無限に要る 単にオブジェクトは必ずしもアドレスじゃなくて、数値をbit表記したものが渡されるだけ http://mevius.5ch.net/test/read.cgi/tech/1743698824/690
691: デフォルトの名無しさん (ワッチョイ f64c-1ngM) [sage] 2025/08/10(日) 19:48:29.35 ID:wmWYPlFf0 RubyとかJavaScriptと違ってPytnonは即値を使わず全部PyObjectじゃなかったっけ? 正直、記憶が曖昧なので自信はないが。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/691
692: デフォルトの名無しさん (ワッチョイ 1a79-MCtg) [sage] 2025/08/10(日) 20:18:34.90 ID:WEeWhG2x0 このあたりの話かな https://docs.python.org/ja/3/c-api/long.html PyObject *PyLong_FromLong(long v) 戻り値: 新しい参照。 次に属します: Stable ABI. v から新たな PyLongObject オブジェクトを生成して返します。失敗のときには NULL を返します。 現在の実装では、-5 から 256 までの全ての整数に対する整数オブジェクトの配列を保持します。この範囲の数を生成すると、実際には既存のオブジェクトに対する参照が返るようになっています。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/692
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 277 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.024s