Pythonのお勉強 Part72
■ このスレッドは過去ログ倉庫に格納されています
!extend:default:vvvvv:1000:1024 !extend:default:vvvvv:1000:1024 ↑スレ立てる毎に減るので、減ってたら3つに補充すること。 ・当スレにRubyのソースコード類を書くことを禁ず ・Ruby等、Pythonではないプログラミング言語での回答類・質問を書くのも禁止 ・「Ruby では」「Rubyでは」「Rails」正規表現→「^クソチョンw$」をNGワード登録推奨 ・エラーを解決したいときは、かならず エラー文(勝手に省略orスクショうp等の横着禁止)と おま環(Pythonのバージョン番号+OS名とバージョン+IDE名)を書け。 ★Pythonのソースコードを5ちゃんに直貼はインデントが崩壊するので、 ↓等のコードうp用サイトに貼ってきてくだしあ。(スクリーンショットをうpる「横着」禁止) ttps://techiedelight.com/compiler/ Run Code機能あり。 ttp://ideone.com/ デフォ設定がCなので、Pythonするには言語種選択ボタン押下がピコ手間かも。 ttp://pastebin.com/ まずまずシンプル。 ttp://dpaste.com/ とてもシンプル。消えるまでの日数は十分長ーく指定のこと。 ◇Pythonオフィシャルサイト http://www.python.org/ ◇Pythonドキュメント https://docs.python.org/ja/3/ ◇まとめwiki ttp://python.rdy.jp/ ※前スレ Pythonのお勉強 Part71 https://mevius.5ch.net/test/read.cgi/tech/1695168821/ VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured >>670 docker使えよ なんで生で使ってるんだ venvも現在のpython環境との依存があるから大して便利でもない pythonの環境作るのにpythonが必要な時点でナンセンスなんだよ pythonのバージョンをとっかえひっかえして使いたい人にとってはそうなのかもしれんが 俺はあんまり気にならんな Linux のローカル開発なら、Docker を使うのが簡単だが、 日本人が作った、多言語バージョンマネージャーのanyenv で、rbenv, nodenv も使える。 pyenv も同様。 asdf でも、多言語の好みのバージョンを入れられる echo $(anyenv root) ただし、$ANYENV_ROOT は定義されていない /home/ユーザー名/.anyenv echo $(rbenv root) echo "$RBENV_ROOT" /home/ユーザー名/.anyenv/envs/rbenv echo $(nodenv root) echo "$NODENV_ROOT" /home/ユーザー名/.anyenv/envs/nodenv システムに最初から入っているバージョンをいじってはならない! 他のアプリがシステムバージョンを使っているから、 それを変更すると、多くのアプリが動かなくなる だから開発環境は、自分だけのユーザー環境以下の /home/ユーザー名/.anyenv 以下に入れる システムバージョンは、 file `which python`, file `which python2`, file `which python3` で確認できる。 /usr/bin/python, /usr/bin/python2, /usr/bin/python3 など pythonの仮想環境とやらがよくわからない こいつら裏で何してんの? 単に特定のディレクトリに別のpythonをインストールしてるだけ 使う時は環境変数を切り替えてそのディレクトリを参照するようにしてる >>680 pythonは3.8、3.9、3.10、3.11と無限にバイナリを変える方針になったから もうそれじゃ無理なんよ 完全に破綻する >>684 サポート切れとかでもない限りユーザーが必要なバージョンを使い続ける形でなんの問題もない 読みができるなら、自動翻訳が正しいかチェックできるので、書けるのと同じ >>686 サポートがすぐ切れるのがpythonのモジュールの特徴 パッケージなら自分が困るような不具合が見つかるかauditで指摘が上がるまで使い続けるかな 一生懸命最新バージョンを追いかけるモチベもないし そんなマイナーパッケージを使う方が悪いし、そもそもPythonとは関係ないだろw 普通に関係あるでしょ Pythonのライブラリは古いバージョン対するサポート期間よりも 新しいバージョンへの対応がめちゃくちゃ遅いほうが問題 メジャーなライブラリでも3.12対応してないものまだまだある どんなプログラミング言語でもあることだし、使いたいライブラリに合わせてPythonのバージョンを選ぶくらい普通のことでは JavaみたいにEOLまでの期間がめちゃくちゃ短いならわかるけど、 3.9ですらあと1年以上あるでしょ そもそもOSSにそこまで期待してもねえ 金払って作らせてるならともかく 3.12を使わなければならない理由があるの?あるのだとしたら自分で直すぐらいの気概でいる必要があるのでは pythonで顔を検出してモザイクかけるのができるのなら 陰部に自動でモザイクかけることもできる? というかそういうソフトってあるの? >>695 陰部がそのままなら難しくは無い だけどオモチャだったりプレイだったりすると判定が難しい まあ顔もそうでしょ パーティグッズみたいなの付けてたら判定難しいのと同じ >>694 メジャーなライブラリが言語の新バージョンに対応するのに 半年〜1年かかるのが常態化してるのはPythonだけ Java、C#、Go、Swift、Ruby、JavaScript、PHPあたりではなかなか見ない 3.9は去年の10月でSPEC 0のサポートが切れてるから特別な事情がない限り選択肢としては無い Numpyとかでも既に落とされてる 言語の公式サポートは5年と長いけど ライブラリの関係で実質サポートは2年〜2年半程度と短いのが実状 >>696 プレイは難しいか… Inpaint-Anythingみたいなので頑張るしかないのな… 手動はもう嫌だ… >>694 JavaよりPythonのほうがランタイムのEOL短くね? 来年のEOLでどう更新するか既に頭痛いぞ お前らそんな事気にしてるのか? 客先でWindows95でVB5で動くシステムが現役で今でもメンテと追加機能開発が普通に有るんだぞ ちなみその客は大手チェーン店で件のシステムがインスコされてるPCが5万台だぞ クローズドだからいいんじゃね 本当にクローズドならな FC98がいまだに使われてるこんな世の中じゃ~(´・ω・`) ベーシックマスターLv2が半導体製造装置の制御に使われてるの見た時はびびった 今のpcのスペックにwin95でSSDとかなら胸が熱くなるなw 30年前のOS動いてるのを観測するとちょっともう1回見たくなる 大きな駅とかイベント会場に設置してある電子看板とか偶にシステムエラーでデスクトップ画面見えるけどWindows95とか多いからね 顔検出のやつでこういうの見つけたんだけど https://huggingface.co/Bingsu/adetailer import cv2 from PIL import Image img = "https://farm5.staticflickr.com/4139/4887614566_6b57ec4422_z.jpg" ; output = model(img) pred = output[0].plot() pred = cv2.cvtColor(pred, cv2.COLOR_BGR2RGB) pred = Image.fromarray(pred) pred これをどういじれば赤枠内をモザイク処理させることができる? デジタルサイネージ Windowsでググると面白いな 95 98 MEでまだ動いてるんだな パチンコ屋のパネルはなんでぶっ壊れても直さないんだろうな Windows95は起動してるだけで何もしてなくても1週間で落ちる(面倒なので原因は追求しなかった) >>694 専ブラ動かすのにしか使ってないから実情知らんけど JavaはLTS選べば長い方になるんじゃね 今からなら17 >>707 FC知らないのかガキめ if a < b: flag = True else: flag = False は flag = a < b と書ける 圧倒的にすっきりするけど、なんか頭に入ってこなくなる どっちがいいんだろ 別にどっちでも良い 細かいことを気にし過ぎ ただし頭に入ってこないってのは不味い 自分は書かなくても書かれてるコードを理解して頭に入る様にする必要はある 理解できない訳はないけど 0.1秒で判るか0.5秒かかるかという話 >>721 普通はどっちもダメ 単純な比較結果をフラグ化したりしない そんなこと言ったらflagという名前も具体的でないのでNG >>721 現実に前者を書くことは無いような気がする。大抵は、 if a < b: flag = 'hinomaru' else: flag = 'union jack' みたいな使い方でしょ。 a < b の評価値を保存したい場合は、自然と後者になるように思う。 filled = bool(count == limit) みたいにbool()使ってたな Pythonのand/orはbool返さない場合あるし 霊感的には、それは、 (flag = a) < b と解釈させたら、 flagがtrueかfalseにより動作が 違くなるような気がする。というか flag ← (a < b) って感じで ゼッタイ何時でもπソンは解釈するのだろうか。 flag = True if a < b else False flagの代入以外に副作用ないならまずこう書くけど flag = a < b でいいやんとなる >>728 >(flag = a) < b と解釈させたら Pythonの場合はflag=aがstatementで値を返さないのでそういう解釈をさせることができない (flag=a)だけでもassignment statementの文法に反してるからエラー (flag := a > b)と(flag :=a) > bでflagの値が変わる 前者が後者のように評価されないのは演算子の優先順位で決まってるから >>726 >a < b の評価値を保存したい場合は、自然と後者になるように思う。 boolを返すa < b を保存するのが妥当な場合ってどんな用途を想定してるの? ・a < bの処理にそれなりの時間がかかる ・a < bの結果を繰り返し使う ・比較演算子がbool値を返す ・関数ではなく演算子を使うのが妥当 俺は↑これを全部満たすような用途は思いつかない いずれにしろflagを使うほうのコードも含めて考えたほうがいいように思う >>732 > ・a < bの結果を繰り返し使う 繰り返しというか、後で使いたいのだろうな。 a と b 各1ワードを保存できる余裕はないけれど、評価結果 1ビットなら64個保存できる! みたいな。いつの時代の話だよ... 元は、後でif文で使う条件が複数あって、最初Falseで初期化して、 一つでも成立したらTrueにして、みたいな処理になってた で、いろいろリファクタリングしてる途中で、>>721 みたいな変形があった 最終的には条件が1つになったのでそのままif文に入れた a, bが不変であっても 変数化することでコードの見通しがよくなるなら 情報が冗長になってもそうする 現実ではしないflagって命名に囚われてそう >>735 それは条件が複数あったとしても条件式部分を関数化して関数内で早期リターンするパターン forの中でアーリーcontinueとか、関数からアーリーreturnは便利に使うけど、 抜ける先が無くてアーリーなんやらできないと困る 関数内関数はなんか読みにくいし 735みたいに、コードの詳細がわからないのにこう書くべきって決めつけてくる人ってなんでなのかな 理想的なケースでは切り出しやすくても、泥臭いケースだと切り出しても見通し悪くなるだけ、みたいなこと よくあるのに >>739 話題の発端の人だろ、 >>735 は。 仕様書を書いてないから、条件分岐の意味がわからなくなるんだよ。 >>739 >>740 ごめん、まちがえた。737だった。735すまん。 たくさんのファイルを3ステップで加工したい 一つずつやると時間かかるので、並列処理させる 全ファイルをステップ1処理 -> 全ファイルをステップ2処理、という感じ それでかなりスピードアップはするけど、 ステップの継ぎ目部分で全体の完了を待つのが無駄 全体は待たずにファイル毎にどんどん先に進む並列処理を 簡単に書くモジュールある? >>748 処理がファイル間で独立しているならmultiprocessingモジュール Unix環境ならxargsコマンドで足りる話にみえるけど concurrent.futuresモジュールのが書きやすいかもしれん どっちも見てみて あんまりいいサンプルが見つからない キモは、プロセスの実行に条件があるという点 file1-step1が完了してないとfile1-step2は実行できない 必要なプロセスを全部登録して実行させるとそんなことは考慮されないので、 どのプロセスが実行可能か依存関係を教えてやらないといけない モジュール使う分には単純だから公式ドキュメント読んで https://docs.python.org/ja/3/library/multiprocessing.html https://docs.python.org/ja/3/library/concurrent.futures.html それでファイル単位に並列にして ファイルを引数にstep1/step2を関数化したら後は呼ぶだけよ あるいは外部コマンド化して cat paths | xargs -IZ -P $(nproc) sh -c 'step1.py Z; step2.py Z' step1とstep2でプロセスを分けずに全体を1つのプロセスにするということかな 実際にはそれぞれで別のexeファイルを実行するのでなかなか難しい for file in files: step1.exe file for file in files: step2.exe file という形じゃなく step1.exe files step2.exe files という形で実行してるなら各exeがファイル毎に進捗報告やコールバックしてくれないと ファイル単位で処理を先に進めるのは無理 前者でやってるならやりようがあるけど ファイル単位じゃなくステップ単位にまとめるとスピードアップしたということなので その原因を先に確認した上でやり方考えたほうがいい 性能向上のための並行/並列化は 具体的な処理内容やワークロードの特性によってアプローチが変わる one size fits allなやり方は存在しない 何を言ってんだこいつは プログラミング言語の前に国語をやり直せ そうだな>>748 を100万回読み直して相手に何が伝わってると思うか感想を述べよ >>752 >'step1.py Z; step2.py Z' これは'step1-3.py Z’でよくない? キャッシュされてもインタプリタ起動のオーバーヘッドはそれなりにかかるので >>755 なるほど 実際にはまだ何も並行化/並列化できてないという話なのか >実際にはそれぞれで別のexeファイルを実行するのでなかなか難しい だったら↑この思い込みを捨てることから始めたほうがいいよ 結局のところPythonで並行/並列化するなら以下の4択なので 具体的な処理内容とワークロードの特性を加味して適切なものを選んでね 1.非同期 2.マルチスレッド 3.マルチプロセス 4.非同期+マルチプロセス 結局、 proc1.exeをsubprocess.Popen()で並列処理 proc2.exeをsubprocess.Popen()で並列処理 proc3.exeをsubprocess.Popen()で並列処理 となっていたものを、 proc1.exe proc2.exe proc3.exe を実行するbatファイルに移動させて、 batファイルをsubprocess.Popen()で並列処理で目的は達成できた batファイルかー、という気もするけど、並列処理で依存関係を気にした例は見つからなかった (並行処理なら普通) バッチファイルのことをbatファイルと書いているのは初めて見た マジか "バッチファイル" 473,000 "batファイル" 134,000 だから少数派ではあるけど、22%くらいの勢力はあるのに そもそも、batファイルを使った経験自体が少ないのでは >>758 テキストファイルの操作みたいだけど、そういうのは処理範囲を指定して同時に動かすんだよ。 >>760 batファイルという書き言葉は最近、発生しているようだけど、一般書籍でもマイクロソフトでもbatファイルとは呼んでいない。 日本語ではバッチファイル、英語ではbatch file。 バッチファイルを使ったことがないというのは、シェルスクリプトを使ったことがないというのと同じで、Pythonコードも動かいたことがないと思われてしまうレベル。 >>762 ステップは行という意味に思われるからやめた方がいい >>762 複数のファイルと書いてあったな。 並列化には担当するファイルを分けるなどいくらでも方法はある。 マルチプロセスの日本語訳が並列処理、マルチスレッドの日本語訳が並行処理だが、英語ではマルチという言葉で同時実行という言葉ではない。 同時実行という意味を付加しているのは日本語。 EXEファイルを二重起動とかPythonもバッチファイルも関係ねえな 実行ファイルを引数なしで実行するとか、シリアル前提処理を多重起動して、想定どおりにならないとか狂っんなw ID:poYagYhe0 は自作自演のネタ野郎だった >>763 batファイルでも別に普通じゃない? 拡張子batのファイルには違いないんだし txtファイル、jpgファイル、mpgファイルと同じだよ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる