1 名前:デフォルトの名無しさん [2023/07/13(木) 18:48:41.56 ID:INS7SIu4.net] 当スレに★Python以外のプログラミング言語での回答類を書くべからず★ 派生言語はそれぞれ専スレがある(この板にあるとは限らない)ので、そっち池。 「Ruby」「Rails」「某言語では」「クソチョンw」をNGワード登録推奨。荒らしは、完全スルー放置が一番きらいです。 このスレッドは「お勉強」スレのほうには書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を、勇気を持って書き込むスレッドです。 へび使いが優しくコメントを返しますので、お礼は Python の布教と初心者の救済をお願いします。 ★エラーを解決したい場合★は、 表示されたエラーの全文(勝手に省略やスクショうp等の横着クソ行為禁止)と、 実行環境(Pythonのバージョン・OSとIDEの種類およびバージョン)をシッカリ書くこと。 Pythonの★ソースコードをそのまま5ちゃんに貼るとインデントが崩れてチヌ★ 【【【複数の連続半角スペースはなにもなかったことにされる&タブは普通には入れられない】】】掲示板の仕様なので、 プログラム文は↓等の、いわゆるコードうp用サイトに貼ってこいください。 ttps://techiedelight.com/compiler/ Run Code機能あり。 ttp://ideone.com/ デフォ設定はC用のため、言語選択ボタン押下がピコ手間かも。 ttp://codepad.org/ ほぼ直感的に使える。Run codeボタンあり。 ttp://pastebin.com/ まずまずシンプル。 ttp://dpaste.com/ とてもシンプル。消えるまでの日数は十分長ーく指定のこと。 ◇Python公式◇ www.python.org/ ◇まとめwiki◇ ttp://python.rdy.jp/wiki.cgi 〇前スレ〇 【まず1嫁】くだすれPython(超初心者用) その58 https://mevius.5ch.net/test/read.cgi/tech/1662514433/ 次スレたては >>985 あたりが挑戦する。 ### END OF TEMPLATE ###
685 名前:デフォルトの名無しさん mailto:sage [2024/06/17(月) 12:50:19.30 ID:Me30jdtI.net] >>674 その状況だとBはAをインポートする必要いやろ よくあるのはtyping用のスタブモジュールを作る方法
686 名前:デフォルトの名無しさん mailto:sage [2024/06/17(月) 14:24:03.32 ID:KAevd3qc.net] >>677 A.py App() B.py Win() winがコンストラクタでsuper().__init__(app.root)するとき App渡せないとroot見えないって言われてしまう
687 名前:デフォルトの名無しさん mailto:sage [2024/06/17(月) 15:22:40.07 ID:Me30jdtI.net] >>678 その例だとWinが依存すべきなのはAppそのものじゃなく Appが継承してる型だったり実装してるインターフェースの型 tkを例にすればWinが依存するのはAppそのものじゃなくtk.Tkやtk.Widget AとBの相互依存から共通で依存する抽象度の高いCを切り出すことで AはBとCに依存、BはCに依存、CはAにもBにも依存しない形になる
688 名前:デフォルトの名無しさん mailto:sage [2024/06/18(火) 23:47:26.99 ID:l8Y5coIJ.net] >>679 仕様上サブがメインのいくつかに依存するから丸ごと渡してたけど rootと、必要な位存箇所だけ渡すようにすればいいのね
689 名前:デフォルトの名無しさん [2024/06/19(水) 07:39:14.75 ID:Ml7xOhwE.net] __init__.py 描けば良いのに
690 名前:デフォルトの名無しさん [2024/06/19(水) 08:41:26.42 ID:oNcSZ2Oe.net] C言語系は数年やっていてpythonのお勉強してるので質問させてくれ @propertyを使用してgetter/setterを作れるのが分かりました このプロパティをprotectedにするにはどうしたらいいですか?
691 名前:デフォルトの名無しさん mailto:sage [2024/06/19(水) 09:10:58.03 ID:Of90IDaN.net] >>682 この辺の話かな? ttps://note.com/yucco72/n/nfc5ba5321567
692 名前:デフォルトの名無しさん [2024/06/19(水) 10:07:39.70 ID:Ml7xOhwE.net] >>683 そいつ馬鹿やな 痒い所に手が届いてる好例なのに
693 名前:デフォルトの名無しさん mailto:sage [2024/06/19(水) 10:48:00.65 ID:EzJYrWWw.net] >>680 サブがメインに依存するという仕様がよろしくないんだよ 依存性の方向を一方通行にするというのがモジュール設計の大原則
694 名前:デフォルトの名無しさん [2024/06/19(水) 11:37:31.50 ID:ANMSl1mg.net] >>685 そうはいってもどんな場合でも回避できるわけじゃないでしょ うまく切り出せば回避できるかもしれないけど、見通しが悪く不自然になる場合があると思う 今自分が困ってるのは先生と生徒の関係で、先生は生徒を何人か選ぶのだけど、先生の事情もあるし、生徒のスケジュールもあるしで、 先生が生徒を選んだ後に、選ばれた生徒に先生のスケジュールはこなせるか?を確認してもらってるんだけど かなり先生と生徒が密結合なのが避けられなくてインタフェースに切り出すと見通しが悪くなりそうなんだよね こういう場合はどうすればいいのかな
695 名前:デフォルトの名無しさん mailto:sage [2024/06/19(水) 19:41:52.46 ID:E1qEKZbV.net] >>685 元の質問者だけど 今回はメインGUIとサブGUIでそれぞれ独立させて、メインGUIからサブGUIを見るだけ に作り直しました ところで__init__.pyを書くとはなんですか?
696 名前:デフォルトの名無しさん mailto:sage [2024/06/19(水) 22:24:53.92 ID:jr8KvPbD.net] ctypesで構造体宣言するときに、以下のようにc側が不完全型の配列定義であった場合は、どのように宣言すればよいでしょうか。 typedef struct aa { uint32 eListType; uint16 wRes; uint16 wOdList[]; } class aa(Structure)
697 名前:: _fields_ = [("eListType",c_uint32), ("wRes",c_uint16), ("wOdList",???) ] [] [ここ壊れてます]
698 名前:デフォルトの名無しさん mailto:sage [2024/06/19(水) 22:42:47.22 ID:0e7E5JVP.net] >>686 >先生が生徒を選んだ後に、選ばれた生徒に先生のスケジュールはこなせるか?を確認してもらってる これもapp.rootのやつと同じで生徒が先生に直接依存する必要なくない? 先生、生徒、コース/クラス、受講、のよくあるモデル 参照じゃなくidで受け渡すことも考えるといいよ
699 名前:デフォルトの名無しさん [2024/06/20(木) 08:09:05.13 ID:hChVJ2JT.net] >>687 それってpipでインストールできる?
700 名前:デフォルトの名無しさん [2024/06/20(木) 17:09:09.89 ID:F8Q2DGBi.net] >>688 C の方が malloc(sizeof(struct aa) + N) みたいにやってるだろうから とりあえず N の最大値くらい確保
701 名前:デフォルトの名無しさん [2024/06/20(木) 17:55:30.81 ID:ZSpymqjs.net] >>689 直接依存する必要がないので、idを持っておけばよいということ? 確かにidから引けるdictを持っておけばよいのはそうだけど、実質的にはそれは依存関係にあって、プログラミング言語での表現の制約を回避する策にすぎないような気がするのだけど勘違い?
702 名前:デフォルトの名無しさん mailto:sage [2024/06/20(木) 18:12:29.06 ID:pudWG0gF.net] >>688 ("wOdList", POINTER(c_uint16)) a = aa() a.wOdList = (c_uint16 * size)() wResがwOdListのsizeだったりするのかな?
703 名前:デフォルトの名無しさん mailto:sage [2024/06/20(木) 23:47:51.33 ID:F6VlqWlP.net] >>692 参照とidはカップリングの度合いの違い 直接依存する必要がないからという理由で書いたわけではないよ 片方がidだけに依存する形にすれば相互依存を解消できる AとBの相互依存からAのidをC切り出して AはBとCに依存、BはCに依存、CはAにもBにも依存しない形にできる ただこういうのはプログラミング上の小手先のテクニックなのは確か >>686 の話はもっとドメインレベルでの本質的な依存関係を先に突き詰めたほうがいいと思う
704 名前:デフォルトの名無しさん mailto:sage [2024/06/21(金) 10:29:55.02 ID:M8EEKVG+.net] >>693 from ctypes import * class aa(Structure): _fields_ = [('a', c_uint32), ('b', POINTER(c_uint16))] a = aa() a.a # 0 a.b # <__main__.LP_c_ushort object at 0x000002033996A340> a.__sizeof__() # 104 sizeof(a) # 16 a.b = (c_uint16 * 4)(9,8,7,6) a.b # <__main__.LP_c_ushort object at 0x000002033996AAC0> a.__sizeof__() # 104 sizeof(a) # 16 だめやん
705 名前:デフォルトの名無しさん mailto:sage [2024/06/21(金) 13:07:20.00 ID:tjV7APzm.net] >>695 そういうもんやで sizeofの結果も自動的に変わると思ってた?
706 名前:デフォルトの名無しさん [2024/06/21(金) 15:09:56.96 ID:M8EEKVG+.net] そういう問題じゃなくて 常にPOINTER型の容量分しか無いのは可笑しい
707 名前:デフォルトの名無しさん mailto:sage [2024/06/21(金) 15:17:35.67 ID:M8EEKVG+.net] 少なくとも >>688 の質問に対して正しい答えは from ctypes import * class aa(Structure): _fields_ = [('a', c_uint32), ('b', POINTER(c_uint16))] a = aa() a.b = (c_uint16 * 4)() # これは間違い sizeof(a) # 16 class bb(Structure): _fields_ = [('a', c_uint32), ('b', (c_uint16 * 4))] b = bb() sizeof(b) # 12 class cc(Structure): _fields_ = [('a', c_uint32), ('b', (c_uint16 * 8))] c = cc() sizeof(c) # 20
708 名前:デフォルトの名無しさん mailto:sage [2024/06/21(金) 15:45:50.01 ID:K+jIH7ye.net] >>697 そういう問題が何を指すのか分からんが__sizeof__もctypes.sizeofもそういう仕様なんだって Cのsizeofも同じやで >>698 固定長にしろや!ってこと? まーそれはそれで一つの選択肢だけど質問の答えにはなっとらんわな
709 名前:デフォルトの名無しさん mailto:sage [2024/06/21(金) 16:03:41.50 ID:K+jIH7ye.net] 単に同じというと誤解を生むかもしれないから言い直しておくと 可変長部分のサイズがsizeofに反映されず自分で計算して別途管理しないといけないのはCも同じ ということ
710 名前:デフォルトの名無しさん mailto:sage [2024/06/21(金) 16:04:51.86 ID:pyvrMoIs.net] pythonでandroidとiOSのアプリ作ってる人いる? kotlinとswift覚えればいいんだけど、手間がかかるので
711 名前:688 mailto:sage [2024/06/21(金) 19:26:17.13 ID:HIobLuWQ.net] みなさんありがとうございます 結局固定長で適当に宣言しとけば良いってことですかね 確かにc側でmalloc使ってそうな気がします
712 名前:デフォルトの名無しさん mailto:sage [2024/06/21(金) 21:53:29.93 ID:xFZSSSbA.net] ちゃんと配列をやるならbuffer protocolにしたら
713 名前:デフォルトの名無しさん mailto:sage [2024/06/22(土) 03:01:56.40 ID:UT0yRehg.net] 変数に何入ってんのかわかんなくない? $%@使い分けるperl最強だわ
714 名前:デフォルトの名無しさん mailto:sage [2024/06/22(土) 03:20:24.58 ID:ITxAndmC.net] 時代はタイプアノテーションなんですよ!(´・ω・`)
715 名前:デフォルトの名無しさん [2024/06/22(土) 09:29:12.03 ID:mcK0MSE8.net] タイプアノテーションで思いだしたが、結局型チェック実装された? それともそこまで効力は無い?
716 名前:デフォルトの名無しさん [2024/06/22(土) 09:38:48.07 ID:R3uDiOs/.net] >>704 #&*も忘れてるだろ
717 名前:デフォルトの名無しさん [2024/06/22(土) 11:44:35.80 ID:tVWK2T1P.net] >>706 Pythonの型チェックは外部ツールに任せるというのがポリシーなので標準実装されることはない 型アノテーションは厳密なチェックをするというよりは文字通り注釈としての役割が主であり、 VSCodeやPyCharmを通じて人間にヒントを与えるという点においてはそれなりに効力はある
718 名前:デフォルトの名無しさん mailto:sage [2024/06/22(土) 13:20:16.98 ID:JlqSUEN6.net] >>708 vscodeでさ a.py __init__ self.b = b.B(subclassX | subclassY) b.py __init__ self.subclass = subclass こうしたとき、b.pyに動的にサブクラス型情報送りたいんだけどどうすればいい? a.py書いたあとにb.py触りに行ったら、self.subclass以下のツールチップがXかYのものになってほしいんだけど
719 名前:デフォルトの名無しさん mailto:sage [2024/06/22(土) 13:39:16.54 ID:o/eWDsQ7.net] >>688 への回答として >>693 は全く不適切 判っててわざと間違ってるんだろうが全く別物 初心者に嘘を教えるのは良くない https://ideone.com/YUADDB #include <stdio.h> #include <stdlib.h> int x; struct A { int a; int b[]; }; struct B { int a; int *b; }; int main(void) { printf("%zu\n", sizeof(x)); printf("%zu\n", sizeof(struct A)); printf("%zu\n", sizeof(struct B)); struct B b = {0}; b.b = (int *)malloc(4 * sizeof(int)); free(b.b); /* struct A a = {0}; a.b = (int *)malloc(4 * sizeof(int)); // compile error free(a.b); // don't free (may be cause to runtime error) */ return 0; }
720 名前:デフォルトの名無しさん mailto:sage [2024/06/22(土) 16:27:25.33 ID:zTNlWcoj.net] >>706 最新のpythonでほぼ完全なGenerics表記が実装された これにMSの静的型チェッカーPyrightを使えば動的言語では初めてまともな型システムが実装されたことになる
721 名前:デフォルトの名無しさん mailto:sage [2024/06/22(土) 16:39:32.42 ID:HiCoQzk6.net] TypeScriptより優れてるってこと?そうかなあ
722 名前:デフォルトの名無しさん mailto:sage [2024/06/22(土) 16:51:56.48 ID:UT0yRehg.net] >>705 そうなんだ、、 勉強してくる
723 名前:デフォルトの名無しさん mailto:sage [2024/06/22(土) 18:07:00.66 ID:n3FOHUyg.net] >>710 flexible array memberの基本的な使い方も知らないのに 無理してレスしなくてもよくない? C側でメモリ確保したいならこう書くんだよ struct A *a = malloc(sizeof(struct A) + size * sizeof(int)); >>693 のa.wOdList = (c_uint16 * size)()はPython側でメモリ確保する場合の話だよ CとPythonでやり取りする時はflexible array memberのsizeも当然受け渡しする必要があるよ こんなんで大丈夫かな?
724 名前:デフォルトの名無しさん mailto:sage [2024/06/22(土) 21:23:10.50 ID:+hHL9oAL.net] # ダイアログを表示する import TkEasyGUI as eg layout = [[eg.Input(width=9, key="pt"), eg.Text("pt", width=6, height=2), eg.Button("コピー", key="pt_copy")], [eg.Input(width=9, key="kyu"), eg.Text("級(歯)", width=6, height=2), eg.Button("コピー", key="kyu_copy")], [eg.Input(width=9, key="mm"), eg.Text("mm", width=6, height=2), eg.Button("コピー", key="mm_copy")]] window = eg.Window("pt-Q-mm", layout, font=(None,14), size=(250,150)) def execute(): in_pt = values["pt"] window["kyu"].update(in_pt) window["mm"].update(in_pt) while True: event, values = window.read() if event == "pt": execute() if event == "kyu": execute() if event == "mm": execute() window.close() key="pt"の入力欄に文字が入力されると、リアルタイムに、 key="kyu"とkey="mm"の入力欄にkey="pt"と同じ文字を表示したいのですが、 def execute():をどう修正すれば良いでしょうか? 今のままだと、key="pt"の入力欄に文字を入力しても、 key="kyu"とkey="mm"の入力欄に何も表示されません…
725 名前:715 mailto:sage [2024/06/22(土) 21:53:43.34 ID:+hHL9oAL.net] JavaScriptのOnChangeみたいなのをやりたかったのですが、止めました ChatGPTに教えてもらったコードでも、うまくリアルタイム表示出来なかったので… 「実行」ボタンを押したら、表示されるようにします ありがとうございました
726 名前:デフォルトの名無しさん [2024/06/23(日) 00:28:02.79 ID:2xccr50A.net] >>714 >C側でメモリ確保したいならこう書く >struct A *a = malloc(sizeof(struct A) + size * sizeof(int)); もちろん知ってる >a.wOdList = (c_uint16 * size)()はPython側でメモリ確保する場合 どこが等価なの
727 名前:デフォルトの名無しさん mailto:sage [2024/06/23(日) 12:15:44.92 ID:6BLTL9tJ.net] >>717 >どこが等価なの 誰も等価だなんて話はしとらんのやで FAMを含む構造体が使われてるCのAPIを FAMを直接サポートしてないctypesを使ってPythonから利用する話をしとるんやで 構造体のメモリをCで確保/開放する場合もあれば Pythonで確保/開放する場合もあるんやで (一旦コピーする場合はそれぞれでやるのもありえるんやで) FAMの有無も違う上に メモリ管理の方法もルールも根本的に違うCとPythonで 等価になるわけないんやで
728 名前:デフォルトの名無しさん mailto:sage [2024/06/23(日) 12:29:27.23 ID:NuUT7kNv.net] >688 >ctypesで構造体宣言するときに、 >以下のようにc側が不完全型の配列定義であった場合は、 >どのように宣言すればよいでしょうか。
729 名前:デフォルトの名無しさん mailto:sage [2024/06/23(日) 12:42:53.65 ID:NuUT7kNv.net] chatGPT の回答を改変した様な解答やね 伝言ゲームでもやってんのかな
730 名前:デフォルトの名無しさん mailto:sage [2024/06/23(日) 19:40:41.83 ID:GsZtttEh.net] 終了までお早めに https://i.imgur.com/f7tN1NE.jpg
731 名前:デフォルトの名無しさん mailto:sage [2024/06/23(日) 20:12:48.30 ID:nLTHI867.net] >>721 もう既にやっとるよ
732 名前:デフォルトの名無しさん mailto:sage [2024/06/23(日) 20:26:42.71 ID:f4WzOl4U.net] >>721 グロ
733 名前:デフォルトの名無しさん [2024/06/24(月) 00:41:26.66 ID:sso3G8sO.net] Pythonの変数、オブジェクトは最初に設定した値でデータ型が決まるから、結局、変数の初期化のような古臭いコーティングルールがないといけない。 データ型がわからなくなったら、データ型を調べるという行き当たりばったりの言語仕様
734 名前:デフォルトの名無しさん [2024/06/24(月) 07:13:54.02 ID:lLj5yZl4.net] >>724 > Pythonの変数、オブジェクトは最初に設定した値でデータ型が決まるから、 最初ってどういう意味だ。
735 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 08:57:31.37 ID:+wQGxx+4.net] >>721 気軽に稼げそうでいいね
736 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 09:38:30.63 ID:ALkJ+vo8.net] メソッドの引数にdictを渡してアンパックする場合しない場合の使い分けってどういう基準なんやろ(´・ω・`)
737 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 10:11:03.74 ID:mBNYuZ1y.net] >>724 Pythonにおける変数、オブジェクト、値、データ型の認識が 根本的に間違ってるのでチュートリアルからやり直しましょう
738 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 11:25:58.61 ID:ldoAoKVT.net] 変数は任意のオブジェクトをアサインできるといっても 実際には複雑化するから最初の型から変えないよね そこを人間が意識する必要があるってことかな typingにつながる話
739 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 12:01:57.24 ID:QPNUuP4k.net] 動的言語を使えない人のメンタルモデルってこういう感じなんだな
740 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 12:02:51.99 ID:uJ7CYiLU.net] pyinstallerでexe(app)化してたんだけど、長い日本語ファイル名だと失敗するね pt.pyにしたら成功した
741 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 12:25:05.97 ID:/T/eMsO3.net] >>730 Pythonが動的型なのは単にその方が処理系の実装が簡単だからで、動的型である事自体にメリットなんてないよ スクリプトの動的なロードだとかNotebookでの試行錯誤云々というのも結局はそういう状況で静的型付けを実装するのが難しいからに過ぎない 静的型では常に型が一つに決まってなきゃいけないというのは誤解で、例えば「DataFrameに格納されうる任意の型」の型を持つ変数を使うんだよ
742 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 12:49:15.81 ID:JonISmvT.net] >>724-725 あえて言えばpythonの変数の型は全てPyObject型だよ
743 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 16:19:00.38 ID:Kheo9t7V.net] >>733 それは実装に使ってるC言語の型システム上での話であって Pythonの型システム上の話ではないよね
744 名前:デフォルトの名無しさん mailto:sage [2024/06/24(月) 19:26:23.98 ID:aCWMRkK6.net] 未だにどれかの型を返す作りが好きになれない
745 名前:デフォルトの名無しさん [2024/06/25(火) 04:15:11.46 ID:dFDrSth2.net] >>733 それは最初は性能の低いパソコン用だったせいで、その名前の変数が始めて出てくるとき、その名前の変数に値が設定されるときに決める構文解釈だっただけ Pythonは作者が構文解析エンジンを作り込むのが面倒だと思っていたせいで、仕様の追加状態も構文解析エンジンをちょっとだけしか変更していない。 そんな行き当たりばったりだったためにヘンテコな仕様になっている。 C言語、BASIC、VB,Perl、シェルスクリプト、Ada言語等の影響を受けているが、手抜きのプログラミング言語のままリリースしてしまった。
746 名前:デフォルトの名無しさん [2024/06/25(火) 04:20:51.69 ID:dFDrSth2.net] 関数の引数がどんな型でも参照渡しとか、アセンブラのサブルーチンよりもひどい設計なんだよなあ
747 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 04:37:03.65 ID:mddxyJup.net] >>724 だからそれが嫌ならpyright使いなよ
748 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 08:26:43.24 ID:9x+jYxZG.net] むしろpythonはすべて値渡しでしょ 内部的に変数の値が参照になっているだけで
749 名前:デフォルトの名無しさん [2024/06/25(火) 08:47:33.30 ID:PJlEmYUO.net] >>737 オブジェクトだからどんな型でも参照渡しなんじゃないのか? もしかして、「参照渡し」という言葉をオレが誤解している?
750 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 09:35:15.76 ID:ZD6OkC9b.net] >>740 Pythonは(参照の)値渡し >>737 は間違いで>>739 が正しい def modify(x): x = None x = [1, 2, 3] modify(x) print(x) #この結果をNoneにできるのが参照渡し
751 名前:デフォルトの名無しさん [2024/06/25(火) 13:25:16.56 ID:PJlEmYUO.net] >>741 それは引数の渡し方でなく、x = Noneによって xが新たな Noneオブジェクトを指した結果じゃないかな。 $ cat x.py def modify(xx, yy): print('xx', id(xx), xx) print('yy', id(yy), yy) xx = None # 代入により別オブジェクトを指す。 yy.clear() # 変更結果が返される。 print('xx', id(xx), xx) print('yy', id(yy), yy) x = [1] y = [11] print('x', id(x), x) print('y', id(y), y) modify(x, y) print('x', id(x), x) print('y', id(y), y) $ python3 x.py x 140253632444160 [1] y 140253627941632 [11] xx 140253632444160 [1] yy 140253627941632 [11] xx 140253637855360 None yy 140253627941632 [] x 140253632444160 [1] y 140253627941632 []
752 名前:デフォルトの名無しさん [2024/06/25(火) 13:26:58.66 ID:ZtCD4zFU.net] >>736 Pythonの造りはtcl/ckに似ている
753 名前:デフォルトの名無しさん [2024/06/25(火) 13:28:25.30 ID:PJlEmYUO.net] >>741 で、C言語だとこんな感じかと想像するが、 変数 xの値である 1 を渡すことを、値渡し、 変数 xのポインタである 0x7ffed3b1f5ac を渡すことを、参照渡しと呼んでいた。 $ cat x.c #include <stdio.h> void modify(int *xx, int *yy) { printf("xx %p %d\n", xx, *xx); printf("yy %p %d\n", yy, *yy); int new_xx = 0; xx = &new_xx; /* 代入により別オブジェクトを指すPython風 */ *yy = 0; /* 変更結果が返される。 */ printf("xx %p %d\n", xx, *xx); printf("yy %p %d\n", yy, *yy); return; } int main(void) { int x = 1; int y = 11; modify(&x, &y); printf("x %p %d\n", &x, x); printf("y %p %d\n", &y, y); return 0; } $ cc x.c && ./a.out xx 0x7ffed3b1f5ac 1 yy 0x7ffed3b1f5a8 11 xx 0x7ffed3b1f58c 0 yy 0x7ffed3b1f5a8 0 x 0x7ffed3b1f5ac 1 y 0x7ffed3b1f5a8 0
754 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 13:30:09.56 ID:ZtCD4zFU.net] >>742 >>741 は出来ないから参照私じゃないって言ってるんだと思うが 君は日本人か?
755 名前:デフォルトの名無しさん [2024/06/25(火) 13:31:55.40 ID:ZtCD4zFU.net] >>744 >変数 xの値である 1 を渡すことを、値渡し、 >変数 xのポインタである 0x7ffed3b1f5ac を渡すことを、参照渡し そんな事実は無い 「参照私」が出現したのはC++から Cには値私とポインタ私しかない
756 名前:742 [2024/06/25(火) 14:10:18.90 ID:PJlEmYUO.net] >>745 同じ渡し方の二つの引数の一方が出来て、他方が出来ないので、渡し方の問題じゃないよね、という話をしたよ。 >>746 Call by Reference の和訳は、ポインタ渡しでも参照渡しでも良いと思うよ。
757 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 14:20:27.21 ID:mddxyJup.net] Cで実装されてるスクリプト言語の引数の渡し方を論じてなんか意味があるのか? そういうメモリモデルってだけの話だ C/C++やFortranみたいにマシンコードと密接に関係してるなら別だが
758 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 14:20:46.33 ID:ZtCD4zFU.net] 明確に参照私と言っていたのはPASCALやね
759 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 14:25:08.71 ID:mddxyJup.net] こいつが言いたいのは参照渡しってのは明示的にアドレスを渡すのではなく変数を渡すと自動でその参照を渡すようにコンパイルされるような言語ということを言いたいのだろうことは理解できるが それをスクリプト言語のPythonで論じてもナンセンス
760 名前:デフォルトの名無しさん [2024/06/25(火) 14:37:32.71 ID:PJlEmYUO.net] >>748 ,750 > Cで実装されてるスクリプト言語の引数の渡し方を論じてなんか意味があるのか? どうなんだろう? この手の話は、C言語の方が見通しやすかろうと思って添えたが。 意味が見出だせなければ無視して。Python例から等価っぽく想像しただけのものなので。
761 名前:デフォルトの名無しさん [2024/06/25(火) 14:49:09.86 ID:PJlEmYUO.net] >>750 > こいつが言いたいのは参照渡しってのは明示的にアドレスを渡すのではなく変数を渡すと自動でその参照を渡すようにコンパイルされるような言語ということを言いたいのだろうことは理解できるが 俺はその一文を理解できない。 シンプルに、 140253632444160 = id(x) の 140253632444160 に、呼び元呼び先ともにアクセスするので、それは「参照渡し」と言うのだと思っていた。 ということだよ。
762 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 14:56:52.16 ID:mddxyJup.net] >>752 CS的にはそれは値渡しだよ ポインタだろうがそれは全て整数をコピーするのだから CS的な参照渡しというのはFortranの以下のような仕様のことを指すことが多い 単に引数をそのまま渡してるのに結果が呼び元に返ってくる https://www.nag-j.co.jp/fortran/FI_11.html#Intents
763 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 16:21:34.93 ID:KN/om7mq.net] >>752 その理解がないのにC/C++の参照渡し語ってて草
764 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 16:53:43.01 ID:9x+jYxZG.net] a = ["ab","cd"] def f(b): b.clear() b = None f(a) print(a) 値渡しの場合(pythonはこっち) 変数aの参照先の箱aに、["ab","cd"]への参照を値として入れる 変数bの参照先の箱bに、変数aの値(["ab","cd"]への参照)を入れる 変数bの参照先の箱bにある値(["ab","cd"]への参照)のclear()メソッドを実行する 変数bの参照先の箱bに、Noneへの参照を値として入れる 変数aの参照先の箱aにある値([]への参照)を表示する 参照渡しの場合 変数aの参照先の箱aに、["ab","cd"]への参照を値として入れる 変数bの参照先を、変数aの参照先の箱aにする 変数bの参照先の箱aにある値(["ab","cd"]への参照)のclear()メソッドを実行する 変数bの参照先の箱aに、Noneへの参照を値として入れる 変数aの参照先の箱aにある値(Noneへの参照)を表示する c言語の場合も、ポインタの値渡しはあっても、参照渡しは無かった記憶
765 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 17:12:56.33 ID:9x+jYxZG.net] void f(int *b) { *b = 2; b = NULL; } void main() { int a = 1; f(&a); printf("%d\n", a); } c言語のポインタの値渡し 変数aの参照先の箱aに、1を値として入れる 変数bの参照先の箱bに、変数aのアドレスを値として入れる 変数bの参照先の箱bにある値(変数aのアドレス)の参照先の箱aに2を入れる 変数bの参照先の箱bに、NULLを値として入れる 変数aの参照先の箱aにある値(2)を表示する void f(int &b) { b = 2; } void main() { int a = 1; f(a); printf("%d\n", a); } c++言語の参照渡し 変数aの参照先の箱aに、1を値として入れる 変数bの参照先を、変数aの参照先の箱aにする 変数bの参照先の箱aに、2を値として入れる 変数aの参照先の箱aにある値(2)を表示する 長文ごめん
766 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 17:20:06.61 ID:ZtCD4zFU.net] で?
767 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 17:26:57.66 ID:PNR4S7a4.net] >>756 参照渡しは実際には変数を指すポインタを値渡ししていて、本質的には等価だよ ポインタに対するちょっとした構文糖衣に過ぎない ポインタに比べて制限が強い分だけ最適化されやすかったりする可能性はあるが
768 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 17:31:05.84 ID:7aKndPlG.net] >>747 yy.clear()のように渡された参照やポインタを通して参照先の値を変更するのと xx = Noneのように渡された参照やポインタ自体を変更するのは同じではない 後者を行った時に呼び出し元の変数も同じように変更されるものが参照渡し >>748 メモリモデルではないよ >>750 引数の渡し方というのはどのプログラミング言語を使う場合にも理解しておくべき基礎 だからスクリプト言語だとナンセンスってことはない もちろんスクリプト言語でも参照渡しをサポートしてる言語はいくつもある
769 名前:デフォルトの名無しさん [2024/06/25(火) 19:08:21.24 ID:PJlEmYUO.net] >>753 ,755,756,759 CS とは何ぞ? その CS的な参照渡しにおける「参照」とは整数以外の何なの? ただ、「参照渡し」とは、サブルーチンへの引数の渡し方でなく、サブルーチンからの引数の返り方を以て、 ・結果が呼び元に返ってくる ・呼び出し元の変数も同じように変更されるもの という性質を言うらしいことが、ボヤっと分かった。 で、参照渡しっぽい事がしたけりゃ、Awkのように配列で授受すれと。 俺は、>>737 と同様に、オブジェクト実体へのポインタや実体のIDの授受を参照渡しと呼ぶのだと思っていたよ。
770 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 19:53:07.98 ID:mddxyJup.net] >>760 参照とはオブジェクトを指し示すもののこと ここでいうオブジェクトとはメモリ領域のことでありプログラミング言語においては特定の値のことを指す つまりそれを指し示すようなものであればなんでも良い VM言語であればスタックフレームからのオフセットに過ぎなかったりする
771 名前:デフォルトの名無しさん [2024/06/25(火) 22:50:01.65 ID:UoDN+2II.net] >>760 とりあえずC++では参照渡しはちゃんと定義されている用語で、 知ってる限りではC++での使われ方と違う使われ方はしないものなので、C++における参照渡しを勉強してくれ そしてnullを代入することに意味のある変数を用意して実際に参照渡しのコードを書いてみて CSとはなんぞという質問が物語っていて、Computer Scienceで共有すべき知識を持っていない状態のように思う
772 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 23:11:20.56 ID:nRVgOfun.net] >>736 横レスだけど この書き込みありがとう perl好きの俺がなんでpython嫌いなのか わかった気がする
773 名前:デフォルトの名無しさん mailto:sage [2024/06/25(火) 23:38:25.41 ID:WkoTZsDY.net] >>760 >ただ、「参照渡し」とは、サブルーチンへの引数の渡し方でなく、サブルーチンからの引数の返り方を以て、 >・結果が呼び元に返ってくる 引数も結果も「返る」というのは少し違う サブルーチン内での引数を変更するとその時点でその変更が直接呼び出し元に反映される
774 名前:デフォルトの名無しさん mailto:sage [2024/06/26(水) 00:11:27.85 ID:kR99xHRb.net] 間違ったこと書いてた張本人は間違いを指摘されても反省するどころか開き直っちゃってるのが解せない 最近そんなやつが多くて萎える
775 名前:デフォルトの名無しさん mailto:sage [2024/06/26(水) 00:20:27.75 ID:/ebqJ/eA.net] >>765 これな
776 名前:デフォルトの名無しさん mailto:sage [2024/06/26(水) 00:20:45.10 ID:/ebqJ/eA.net] 多分、朝鮮人
777 名前:デフォルトの名無しさん [2024/06/26(水) 01:10:11.09 ID:yv8Z2CuH.net] >>760 番地なのか、番地にあるものなのかのような違いで、Pythonはコンピューターそのものですらやらない方法をとってしまっている。 大きなデータではなければ、コピーを作って渡すのが、ほとんどのプログラミング言語の仕様。 Pythonの関数はアセンブラだと他のプログラミング言語はサブルーチンの呼び出しと同じだが、Pythonはただのジャンプ命令でプログラムを行ったり来たりしているだけ。 いまのCPU内はレジスタが多いからあまり問題にならないが、Pythonも一定の長い連続領域の場合は、メモリとファイルを使うことになる。 同時実行プロセスが多い高性能サーバーとは相性が悪い。 クラウドという仮想サーバーなら、動的に仮想サーバーが変えるから、Pythonでいい。 もともと忘れ去られていた言語が掘り起こされて使われて、変な仕様だがよく使われるようになっただけ。 Pythonそのものが仮想マシンで動くように変更されたから、CUIで復活したのがいつの間にか、メインプログラミング言語になっている奇妙な現象 ただし、AWS社以外はあまり乗り気でない。 洗練されていない汚い言語は、汚く見せない技術がいる。
778 名前:デフォルトの名無しさん [2024/06/26(水) 01:15:56.13 ID:yv8Z2CuH.net] >>764 サブルーチンとは呼び出し元の情報をメモリに保存して、呼び出された側の処理が終わったときにメモリから情報を取り出して元に戻ることだ。 Pythonの関数は後付けであるため、関数と言いながらも実態は処理を書き分けただけにすぎない。 サブルーチンではなく、プログラム内を飛んでいるだけ。 スタック領域にプッシュもポップもしていない。
779 名前:デフォルトの名無しさん [2024/06/26(水) 01:18:19.20 ID:yv8Z2CuH.net] オブジェクトという概念もあとから追加したせいで、わかりにくい分類の型ができてしまった。 コレクションという用語にしなかったのも謎
780 名前:デフォルトの名無しさん [2024/06/26(水) 10:30:09.24 ID:esETAUdE.net] 初心者です、tkinterで作ったGUIの反応が遅い afterでマシにはなったんだけど で、マウスクリッ
781 名前:クした時刻(OSでのクリック検知時点のシステム時刻)みたいなの取れる方法ありますか やりたいことは、 クリック時刻とbindした関数が呼ばれた時刻をログに取ってみたい Windowsです bindした関数が呼ばれる以前にユーザの作ったプログラムでクリック把握する方法、そんなのあるか!ではなくて、後追いででも確認できないものかと [] [ここ壊れてます]
782 名前:デフォルトの名無しさん [2024/06/26(水) 11:16:31.48 ID:esETAUdE.net] >>771 です そのごググって下記のページで近いことが出来そうかと 本当は早くする方法が知りたいのだけど、今は何を聞けばいいのかもわからないのでまた後程 https://taida-eng.com/%E9%80%86%E5%BC%95%E3%81%8D%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89/python%E9%80%86%E5%BC%95%E3%81%8D%EF%BC%9A%E3%83%9E%E3%82%A6%E3%82%B9%E6%93%8D%E4%BD%9C%E3%81%AE%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%9F%E3%81%84/
783 名前:デフォルトの名無しさん mailto:sage [2024/06/26(水) 14:03:59.21 ID:H6JHbd75.net] root.bind('<Button-1>', lambda _: print(datetime.datetime.now())
784 名前:デフォルトの名無しさん [2024/06/26(水) 14:53:45.89 ID:esETAUdE.net] >>773 ありがとうございます 早速やってみて、時刻がコンソール出力されることを確認しました やってみると >>772 のリンク先のpynputを使用したほうが早い時刻を取得しており、 体感的にもpynputの時刻がマウス操作時刻と思われます また、関数が呼ばれた時点の時刻も表示したら、 pynput -> 関数 -> rootにbindのラムダ関数の順に表示されました わたくし、何か勘違いしてますでしょうか pynputクリック検知 2024-06-26 14:46:54.026669 関数コール時時刻 2024-06-26 14:46:55.787093 クリック検知時刻 2024-06-26 14:46:56.076000 <- rootにバインドしたラムダ関数 pynputクリック検知 2024-06-26 14:41:35.307322 イベント発生時y 299 chartkobetu呼ばれました 選択中の銘柄 4208 型 <class 'str'> 個別5mの存在順i番目銘柄= 18 存在列 126 銘柄コード 4208 <class 'str'> 個別チャート日足、呼ばれました j= 1 dfcoloffset= 1 linecolor= #ffff00 j= 2 dfcoloffset= 2 linecolor= #189af9 j= 3 dfcoloffset= 3 linecolor= #e38089 j= 4 dfcoloffset= 5 linecolor= #00ff00 クリック検知時刻 2024-06-26 14:41:38.955128
785 名前:デフォルトの名無しさん [2024/06/26(水) 15:01:12.85 ID:esETAUdE.net] >>774 の最後についているのは今作っているコードの動作状況を確認するためprintで出力しているものです 編集中に送信してしまいましたので、時刻検知とは関係ない内容で、時刻の取得時点の比較ができないデータです、すみません