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 ###
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で出力しているものです 編集中に送信してしまいましたので、時刻検知とは関係ない内容で、時刻の取得時点の比較ができないデータです、すみません
786 名前:デフォルトの名無しさん mailto:sage [2024/06/26(水) 17:34:00.99 ID:zF60WWs1.net] >>774 メインスレッドをブロックして何か処理をしてるんでしょ クリックすると時刻をprintするボタン1つだけ最低限のアプリで クリックに対する反応がどの程度なのかを確認してみたらいいと思う
787 名前:デフォルトの名無しさん [2024/06/26(水) 19:15:47.84 ID:esETAUdE.net] >>776 レスありがとうございます 最小限だと同じ時刻になる、これ以上、細かい桁が測れるのかもよく分からないけど十分速いかと pynputクリック検知 2024-06-26 19:09:50.128802 関数コール時時刻 2024-06-26 19:09:50.128802 Widgetを追加しながら作っていて、 最初にサンプル的なボタンを押してラベル文字書き変えの プログラムでは応答性は何の問題にもならないレベルだったので、 まあこんなものかと
788 名前:デフォルトの名無しさん [2024/06/26(水) 19:17:32.22 ID:esETAUdE.net] >>777 ですけど あまりに遅いので、cProfileで動作時間を測ってはいて 一番長い関数で138ms、 一方でpynputクリック検知 から 関数コール時時刻 までは1.76s (14:46:55.787093 - 14:46:54.026669= 1.7604) もっと遅くなることもある 2秒近くかかる処理なんか作ってないんだけど、さてどうしたものか
789 名前:デフォルトの名無しさん [2024/06/26(水) 19:23:16.01 ID:esETAUdE.net] 連投すまん エクセルVBAで作っていたプログラムを練習がてらpython移植してみるんだけど、 VBAでいうDoEventsみたいなものはpython、tkinterには無い、ということでしょうか ネット検索すると別スレッドで実行しろとか出てくるけど、こっちで考えたほうがいいのかどうか
790 名前:デフォルトの名無しさん [2024/06/26(水) 21:33:53.43 ID:UcQAC2Co.net] VBAのDoEventsをどう使っているのか良うわからんが、subprocess.runじゃだめけ?
791 名前:デフォルトの名無しさん [2024/06/26(水) 22:20:47.89 ID:esETAUdE.net] >>780 ありがとうございます VBAのDoEventsが実行されると、OSのqueueに溜まっているユーザー操作が実行されます もし1周0.2s程度のループをネストして100回やらせると約20秒間かかりきりで(応答なし)になるところ、 内側のループの最初(でなくてもいいけど)にDoEventsを入れれば約0.2s毎にユーザ操作の処理が入るので応答なしにはならず、 0.2sくら
792 名前:「ならちょっと反応悪いかな、くらいのレスポンスになります(UI処理をやった分だけ、ループの完了は伸びる) さて、subprocess.runを早速調べてみましたが、OSにやらせたいことをコマンド指定でやらせる、ということでしょうか OS側で溜まってることがあるのならこのタイミングで済ませてな、なにがあるのかしらんけど、という使い方はできるのでしょうか もう少し調べてみます [] [ここ壊れてます]
793 名前:デフォルトの名無しさん mailto:sage [2024/06/26(水) 22:40:40.89 ID:hSYD6qWQ.net] >>777 てことは君のコードが書き方が原因なのは確定なので まずは再現性のある最小限のコードを提示してね それ以外の話はそれから
794 名前:デフォルトの名無しさん [2024/06/26(水) 23:01:35.15 ID:esETAUdE.net] >>782 はい、わたしの作ったコードが反応遅いという話をしています そして最初の質問事項は、マウスクリックした時刻(OSでのクリック検知時点のシステム時刻)みたいなの取れる方法、でした これはググって解決しました 以降の話はレスをいただいた方への返信と、DoEvents相当のものがあるかという質問です エクセルはスレチかと思いますのでエクセルの話を続ける気はありません 引き続き自力でも調べてみます
795 名前:デフォルトの名無しさん mailto:sage [2024/06/26(水) 23:06:33.48 ID:p3vHraeo.net] PythonのGUIアプリなんかどのみち自分用ツールにしかならないんだから、ipywidgets やstreamlitで十分だろう 元々スレッドが分離されてるからビジー状態にしても全く問題ないよ
796 名前:デフォルトの名無しさん mailto:sage [2024/06/26(水) 23:13:46.30 ID:hG8QBVa6.net] pythonのGILのせいじゃないの? そこまで反応性が重要ならpythonは向いてない
797 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 00:43:31.20 ID:DskBlp2q.net] 別スレッド化したりしてもtkinterに干渉するとランダムな幅の遅れが出る たとえばプログレスバーをn秒ちょうどで満たすようなコードは書けない(試行毎にバラバラの誤差が生じる) 多分GILとかブロックの問題で、解決できない。これはpythonとtkinterの仕様
798 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 10:04:13.91 ID:OTNDZ+yC.net] どんな酷いコード描いてるのか観たいから笑わないからぜひ晒してくれ
799 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 11:44:11.82 ID:THiq2UM5.net] >>786 どの言語でも試行毎に誤差はでる その誤差を許容範囲内にするだけ GILの問題でも解決方法はあるよ
800 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 15:00:13.36 ID:oRm7STy0.net] 最新のpythonだとGILオフにできるらしい そのバージョンでやってみたら?
801 名前:デフォルトの名無しさん [2024/06/27(木) 15:06:22.67 ID:WK2H4wzF.net] >>783 async使え 懐かしい問題だなw VB時代とかはbackgroundwokerとか使ってUIスレッドを止めないようにしてたけど今の時代ならasync/awaitでお前さんのループでの処理書けばおk
802 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 15:21:15.01 ID:CgIutZfe.net] こんな人がasyncにするとこんがらかりそう
803 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 15:40:57.25 ID:oRm7STy0.net] pythonのGUIはマルチスレッドで処理を逃してもGILでロックしまくりで遅くなる かといって重い処理を動かすとブロックする async使ってもブロックしたら終わりなのは同じ 詰み
804 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 17:23:36.34 ID:NmEKUmlO.net] CPUバウンドな処理はPythonならマルチプロセスにするのが常識 サブインタープリターも使えるようになったけど本格的に使えるのは3.13から async使うのはI/Oバウンドな処理 これも常識
805 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 17:34:34.83 ID:Qbo7b3Vg.net] であればGUI制御が別プロセスになってるソリューションがあんのかな それかライブラリを叩く粒度を大きくする工夫があるのか
806 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 18:53:48.27 ID:WKYIGf9o.net] 言語やOSに関係なく基本的にどのGUIフレームワークでも アプリケーションのメインスレッドで UIイベントのハンドリングやUI操作を行うことが前提になってる だから別プロセスにするのはGUI制御ではなくてUIに関係ないCPUバウンドの処理 つまり基本的にはGUIフレームワークの守備範囲外
807 名前:デフォルトの名無しさん [2024/06/27(木) 19:04:32.49 ID:F52juMPQ.net] >>791 超初心者用スレで無双か。
808 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 19:09:48.41 ID:oRm7STy0.net] >>795 C#はその辺シームレスなんだよね
809 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 22:23:02.86 ID:/FJYXYiJ.net] だれも.afterは回答しないのか
810 名前:デフォルトの名無しさん [2024/06/27(木) 22:39:51.02 ID:QXPbo1LF.net] そんなafter使うような真面目な人間は5chに来ない
811 名前:デフォルトの名無しさん mailto:sage [2024/06/27(木) 23:54:31.61 ID:o3056e9S.net] >>797 言語と並行プログラミング用ライブラリとGUIフレームワークの役割分担はC#も基本的に同じ でも同期コンテキストの存在とかTPLの使いやすさとかC#/TPL前提のドキュメントの豊富さとか シームレスに感じる理由が多々あるのはわかる >>798 afterは使ってるって最初に書いてたよ
812 名前:デフォルトの名無しさん mailto:sage [2024/06/28(金) 08:28:53.40 ID:J/XDPL0h.net] async は失敗だったよな Pythonでスレッド数の消費が問題になるようなものを運用してる奴なんて極僅かなんだからライブラリがわざわざ対応する訳がない Javaみたいに世間の流行なんかガン無視してマイクロスレッドに賭けるべきだった
813 名前:デフォルトの名無しさん mailto:sage [2024/06/28(金) 09:12:53.81 ID:5vFH0KpM.net] Web系の要望だろうけど Twistedさん殺しにいかなくてもとは思った
814 名前:デフォルトの名無しさん [2024/06/28(金) 11:24:07.08 ID:joeyrg+E.net] Twisted懐かしいな お世話になりました
815 名前:デフォルトの名無しさん mailto:sage [2024/06/28(金) 14:11:06.71 ID:sa0QpqCC.net] >>801 GIL外したからマイクロスレッドもありなんだよな asyncioを駆使して書き直すのも面倒だし
816 名前:デフォルトの名無しさん mailto:sage [2024/06/28(金) 17:38:58.38 ID:IKZAS17P.net] グリーンスレッドのことをマイクロスレッドと呼んでる? であればasyncのTaskがそれだよ
817 名前:デフォルトの名無しさん mailto:sage [2024/06/28(金) 17:39:52.27 ID:bVzHKq+e.net] インターネットからのパッケージの入手ができないクローズドな環境で Pythonを使ってます Portable運用ができるのでWinPythonを使っているのですが、 同梱されているものがバージョンにより異なり、 PandasやKerasが入っていたりいなかったりするのがちょっと困ってます 自分が必要なものを導入した状態でポータブル化したPython環境、 みたいなものを作る方法はありますでしょうか
818 名前:デフォルトの名無しさん mailto:sage [2024/06/28(金) 17:44:05.75 ID:sa0QpqCC.net] >>805 ちゃうよ ゴルーチンみたいな奴 ちゃんとスレッドは使う
819 名前:デフォルトの名無しさん mailto:sage [2024/06/28(金) 18:21:18.71 ID:IKZAS17P.net] >>807 それはグリーンスレッドのスケジューラー/エグゼキューターが 内部でOSスレッドのスレッドプールを使ってるという話でしょ asyncのTaskをOSのスレッドのスレッドプールで回すのと仕組み的は同じでは? スケジューリング方法の違いやスタックの有無だったり スケジューラー/エグゼキューターが言語にビルトインされてて アプリケーションコードで意識しなくてもいいとか ゴルーチンとの違いはいろいろあるけど それはマイクロスレッドの定義とは関係ないんじゃない?
820 名前:デフォルトの名無しさん mailto:sage [2024/06/28(金) 18:33:47.84 ID:sa0QpqCC.net] >>808 asyncのTaskは数千、数万も作れないでしょ ゴルーチンすなわちマイクロスレッドはそれぐらい作れる設計
821 名前:デフォルトの名無しさん mailto:sage [2024/06/28(金) 18:50:13.66 ID:IKZAS17P.net] >>809 >asyncのTaskは数千、数万も作れないでしょ インタープリターだから生成が遅いというだけで その数は余裕でしょ
822 名前:デフォルトの名無しさん [2024/06/28(金) 20:02:09.92 ID:TzaR5aOj.net] >806 ありますよ
823 名前:デフォルトの名無しさん mailto:sage [2024/06/28(金) 21:12:32.85 ID:sa0QpqCC.net] >>810 asyncはあくまでIOが並列化できるだけ 計算の実態を数万作れるのはゴルーチンだけ よって本質が全く違う
824 名前:デフォルトの名無しさん mailto:sage [2024/06/28(金) 21:42:27.28 ID:69xrfFOO.net] >>812 が間違っていて理解も不足している 各言語のasyncタスクは数万タスク動かせる Pythonでは試していないがおそらく動くのだろう
825 名前:デフォルトの名無しさん mailto:sage [2024/06/28(金) 22:10:06.47 ID:sa0QpqCC.net] >>813 だから動かないって ゴルーチンは「計算の主体」(って意味わかる?) を数百万個作れる これはユーザースペースでコンテキストスイッチをしてるため おまけにスタックサイズも動的な上に小さい 全てマシンコードレベルで行われる 当然ロックなど存在しない これがマイクロスレッド
826 名前:デフォルトの名無しさん mailto:sage [2024/06/28(金) 22:15:33.56 ID:69xrfFOO.net] >>814 君は非同期タスクについて何も知らない無知者だとわかった まずは勉強して知識をつけなさい もう君の相手をすることはない
827 名前:デフォルトの名無しさん mailto:sage [2024/06/28(金) 22:21:09.52 ID:sa0QpqCC.net] >>815 御託はいいから動かしてみてね 思い処理を数万個でいいから Goだと並列でちゃんと動くよ
828 名前:デフォルトの名無しさん mailto:sage [2024/06/28(金) 22:35:05.70 ID:b9qgRVqH.net] asyncのtaskはどの言語でもJavaScriptからRustに至るまで数万個並行で動作するよ そのために各言語に導入されたんだよ
829 名前:デフォルトの名無しさん mailto:sage [2024/06/29(土) 03:17:28.84 ID:4AUQ0CVf.net] Elixir は、10万もの小プロセスを起動できる。 メモリが大きいと、5千万小プロセスも。 ただし、小プロセスは、OS のプロセスとは異なるものです スクエニは、Elixirを使っているらしい Go の並行処理も、mattn の本に書いてあるけど、 C で、OS の100スレッドを起動したら、 CPU 使用率が高く、12秒も掛かったが、 Goで100 goroutine を起動したら、 6スレッドしか起動せず、9秒で済んだ Goの方が、CPUコアを効率的に使える とにかく、スレッドを起動したらダメ! CPUコアや時間の大半が、スレッドの起動処理に使われるから
830 名前:デフォルトの名無しさん mailto:sage [2024/06/29(土) 08:36:40.26 ID:9/qe2SG9.net] 知ったかぶりして間違ったこと書く やんわり間違いを指摘される 反省せずに開き直る! またこの流れ ググればすぐわかるような間違いなのになんなんだろうな
831 名前:デフォルトの名無しさん mailto:sage [2024/06/29(土) 09:05:37.50 ID:C+0SrrrI.net] ElixrはCPU使う処理は得意ではないよ 処理は一瞬で終わるが大量の処理を必要とするようなものが得意 それこそpush通知とかね Goのようにマシンコードレベルでコンテキストスイッチを実装してるわけではないから 重い処理を書くと途端に負荷が上がる
832 名前:デフォルトの名無しさん mailto:sage [2024/06/30(日) 11:06:44.92 ID:L3wyoKVN.net] Erlang最強
833 名前:デフォルトの名無しさん mailto:sage [2024/07/01(月) 05:47:45.32 ID:ppYg1fh2.net] AIならね
834 名前:デフォルトの名無しさん mailto:sage [2024/07/07(日) 10:33:44.66 ID:1r2hUTKR.net] pythonで、windows10か11の多画面環境で特定のウインドウのSS撮りたいんだけど ウインドウハンドル取得してwinAPI叩いてやってるんだけど メイン画面以外で縦方向に数百pixの座標ズレが出てしまう こういう書き方しろ、みたいなのご存知の方どなたか…
835 名前:デフォルトの名無しさん mailto:sage [2024/07/07(日) 22:05:47.86 ID:5EkJktI1.net] >>823 それのどこがPythonに関係あると思うの? 何らかPythonならではのところに原因がありそうなのであればその辺の詳しい情報を出してくれないことには分かるわけないし、 そうでないならCのサンプルコードを探した方がいいのでは
836 名前:デフォルトの名無しさん [2024/07/07(日) 23:45:08.47 ID:y7P/TwV5.net] pythonで取得したいのだからpythonの話でしょうよ どうせSS部分pythonのライブラリ使うんだから (ビットマップオブジェクトとかまでapi叩くんならアレだけど)
837 名前:デフォルトの名無しさん mailto:sage [2024/07/07(日) 23:57:01.73 ID:5gDGdFIi.net] 自分で書いたコード提示して聞いた方が回答つくと思うが
838 名前:デフォルトの名無しさん mailto:sage [2024/07/08(月) 00:05:50.31 ID:+/07puKi.net] Windowsのマルチモニタ環境では、各モニタの座標系が異なるため、座標のズレが発生することがあります。この問題を解決するためには、モニタの相対的な位置と解像度を考慮して座標を変換する必要があります
839 名前:デフォルトの名無しさん mailto:sage [2024/07/08(月) 00:06:20.59 ID:+/07puKi.net] 1. 各モニタの情報を取得する 2. 指定したウィンドウがどのモニタにあるかを特定する 3. ウィンドウの座標をそのモニタの座標系に変換する
840 名前:デフォルトの名無しさん [2024/07/08(月) 08:43:58.61 ID:XK4Xq7P1.net] ういんどうずはクソなので超めんどくせえんだわ おれはウインドウ内のみ欲しくて、その描画myW, myHが分かってる場合しか書いたことないけど rectたちから計算できるべ多分 DWMWA_EXTENDED_FRAME_BOUNDS = 9 r_rect = ctypes.wintypes.RECT() ctypes.windll.dwmapi.DwmGetWindowAttribute(hwnd, DWMWA〜, ctypes.byref(rect), ctypes.sizeof(rect)) _style = win32gui.GetWindowLong(hwnd, win32con.GWL_STYLE) if _style & win32con.WS_THICKFRAME: _win_border_size = win32api.GetSystemMetrics(win32con.SM_CYFRAME) else: _win_border_size = win32api.GetSystemMetrics(win32con.SM_CYBORDER) win_border_size *= 2 c_rect = win32gui.GetClientRect(hwnd) w_rect = win32gui.GetWindowRect(hwnd)
841 名前:デフォルトの名無しさん [2024/07/08(月) 08:45:47.33 ID:XK4Xq7P1.net] r_height = r_rect.bottom - r_rect.top c_width = c_rect[2] - c_rect[0] c_height = c_rect[3] - c_rect[1] w_width = w_rect[2] - w_rect[0] src_pos_x = (w_width - c_width) // 2 titlebar_height = r_height - c_height - win_border_size hwndDC = win32gui.GetWindowDC(hwnd) mfcDC = win32ui.CreateDCFromHandle(hwndDC) saveDC = mfcDC.CreateCompatibleDC() saveBitMap = win32ui.CreateBitmap() saveBitMap.CreateCompatibleBitmap(mfcDC, myW, myH) saveDC.SelectObject(saveBitMap) saveDC.BitBlt((0, 0), (myW, myH), mfcDC, (src_x, titlebar_height), win32con.SRCCOPY) bmpinfo = saveBitMap.GetInfo() bmpstr = saveBitMap.GetBitmapBits(True) im = Image.frombuffer('RGB', (bmpinfo['bmWidth'], bmpinfo['bmHeight']), bmpstr, 'raw', 'BGRX', 0, 1) win32gui.DeleteObject(saveBitMap.GetHandle()) saveDC.DeleteDC() mfcDC.DeleteDC() win32gui.ReleaseDC(hwnd, hwndDC) 高DPI対応でこれ入れてるとずれるからそれは知らん ctypes.windll.shcore.SetProcessDpiAwareness(1)
842 名前:デフォルトの名無しさん [2024/07/08(月) 08:48:31.66 ID:XK4Xq7P1.net] 訂正 saveDC.BitBlt((0, 0), (myW, myH), mfcDC, (src_pos_x, titlebar_height), win32con.SRCCOPY)
843 名前:デフォルトの名無しさん mailto:sage [2024/07/08(月) 21:09:08.76 ID:s8AzJdEo.net] >>829-831 マジで助かりました…上手くいきましたが コードが全然読めないので精進します
844 名前:デフォルトの名無しさん [2024/07/09(火) 01:02:05.27 ID:qs1jvts2.net] posXの計算式どういう理屈でそれなんだろう… 総当たりで試したのかな
845 名前:デフォルトの名無しさん mailto:sage [2024/07/09(火) 17:53:08.61 ID:ycuYR4Xv.net] 質問失礼します VersionError: The client version 0.52.3492 is too old. Please update to the latest package on PyPi: と出てきました、調べたところThis library requires Python 3.8-3.12.と出てきたのですが 自分の使用バージョンはPython 3.10 pipも最新の24に更新済み、他にどこを直せばいいのでしょう
846 名前:デフォルトの名無しさん mailto:sage [2024/07/09(火) 18:57:30.17 ID:JSIA10ur.net] すみませんVSCodeのシンタックスハイライトについて質問です シンタックスハイライトをPython仕様にしたいと思うのですがこんな感じで変えられますか? とりあえず今のままではメソッドなのかクラスなのか変数なのか全くわからないのでどうもできません https://i.imgur.com/l8UEuMt.png
847 名前:デフォルトの名無しさん mailto:sage [2024/07/09(火) 19:06:47.56 ID:w695tFt+.net] >>834 PyPiが古いんだろ