Pythonのお勉強 Part72
>>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ファイルと同じだよ テキストファイルの拡張子をtxtとしているのはWindowsの世界だけ Windowsを使っていてバッチファイルを知らないなんて素人だろ >>770 拡張子は拡張子でしかない JPEGのファイルの拡張子はjpegが本来の拡張子で、jpgはWindows、MS-DOSの拡張子は3文字までという仕様で発生したもの。 さらにWindowsのデフォルト設定だと拡張子を表示しないんだぜ? 何をどう勘違いしているのかな。 拡張子がhtmlだとhtmlファイル、拡張子がhtmだとhtmファイルだと呼ぶなら、単に無知をごまかしているだけ バッチファイルはマイクロソフトの命名のセンスが悪かっただけだが、バッチファイルと作っている会社が言っている名称を使うのが素直 拡張子が3文字だと思っている疑惑があるのと、UNIX、Linuxの世界では拡張子はあくまで目印にすぎない ファイルが何のファイルかは少し読み込んで判断する WindowsでUTF-8のテキストファイルを扱う場合は、テキストファイルにBOMという情報を先頭に書く シェルスクリプトも1行目に自分自身の種類と何で実行するのかを書く どうでもいいことで盛り上がってんなww batファイルってのは同じバッチファイルでも.cmdじゃなく.batだぞってこと htmファイルも同じ まあ個人的には.batファイルのようにドット付きでなら書くけどドット無しでは書かないな >>758 proc1.exeをsubprocess.run() proc2.exeをsubprocess.run() proc3.exeをsubprocess.run() ↑この一連を関数にまとめればbatファイルはいらない それとまとめた関数は直接Popenじゃなくmultiprocessing経由で処理すれば Poolを使う分だけオーバーヘッドが減る あと処理内容次第だけどasyncio使って全部非同期ににしたほうが コードは多少面倒でもリソースが減って速度も出る可能性もある Pool版も問題なく動いた if __name__ == '__main__': が要るのね 子供がエラー出てもなんも判らんのな get() すると判るけど、マルチプロセスにならないので、デバッグ終わったら外す グローバル変数経由で参照させようとしても見えないとか罠がいろいろ apply_async(func, args=(arg,)) の余計なコンマもなんじゃこれと思ったら、無いと動かないんだよな そんなもんバグやがな グローバル変数が参照できるかどうかは処理系依存な気がするんだよな Copy-On-Writeでプロセス増やしてたら普通に参照できる筈 そんな互換性の無いコードが書けていいのかとは思うけど さすがにこのレベルの基礎を押さえていない人は 自称Python初心者でなくても↓こちらのスレへどうぞ >●関連スレ● 自称初心者は↓へ >【まず1嫁】くだすれPython(超初心者用) その59 >https://mevius.5ch.net/test/read.cgi/tech/1689241721/ 要素1個のタプル 1, 要素0個のタプル () なんでやねん コンマこそがタプルを表しているなら、コンマだけが空タプルの本質だろうに 冗長に書いて(,) でもエラーになる コンマがタプルで括弧はおまけだけど空の時だけ例外ルール >>790 あのさ(1)だとタプルじゃなくてただ数値がカッコで括られてるだけと判別出来ないだろ >>792 要素数が変化しない空のシーケンスを表現するためにある fが引数1個を取る関数、gが引数を取らない関数だとしたら apply(f, (1,))とapply(g, ()) のようにempty tupleを使うのが理にかなってる SQLで書いてるクエリをSQLAlchemyでORMにしたいのに 全然出来んわ、半分諦めかけてる なんかコツとかないんか? word1かword2かword3のいずれかがstrに含まれているかどうか はどうやったらすっきり書けるだろう 内包表記なら書けるけど、 if (word1, word2, word3) in str くらいの判りやすさが欲しい すぐに思いつかないようなゴルフが仮にできるとしても 関数化した方がわかりやすいとおもう any(w in str for w in words)で不満か? >>798 >>796 さんは「すっきり」と仰っていますが。 # 敢えて反語法で表現しました。 >>800 (word1 in str) or (word2 in str) or (word3 in str) を、すっきり書きたいのですと。 list in str を許容するように文法を変える 結果のリストが得られるので、 any(list in str) みたいに使う >>796 ここで言うstrって変数じゃなくて型か? any([isinstance(x, str) for x in (word1, word2, word3)]) any(map(isinstance, (word1, word2, word3), [str]*3)) 関数一つかますしか無いだろうな def find_words(list, str): return [w in str for w in list] print(any(find_words(['a', 'b'], 'bcde'))) 、pythonでWEBスクレイピングをしてるのですが、タスクスケジューラで動かすと画面が欠けます。 ログイン中だと問題なくでます。 なぜかサイズ指定しても効かないのですが、タスクスケジューラで登録して自動実行させてる方いませんでしょか? >>810 「ユーザーがログオンしているかどうかに関わらず実行する」が選択された場合、 タスクはセッション0のデスクトップが無い環境で実行される(Vista以降) 通常のブラウザでイスクレイピングをしたければ適当なアカウントにログインしていなければならない またはヘッドレスモードのあるブラウザなら動きそうではあるがどうだったかな >>811 ありがとうございます。 ヘットレスモード試してみます。 まずはログインした状態でタスクスケジューラ起動とかが一番近道かもですね! >>796 s = set(str.split()) if {word1, word2, word3} & s != {}: ... >>796 ごめん間違えた s = set(str.split()) if {word1, word2, word3} & s != set(): ... 配列のインデックスが1じゃなく0から始まる利点て? 0の方がいろいろ合理的だけど、 printf(f'{count+1}') とかやるよな 範囲を示す時に始点と終点よりも、始点と終点+1(次の要素の始点)の方が 便利なケースが圧倒的に多いけど、なんか怖いので愚直にやる >>813-814 スマソ、なんか Trueにならなくね? >>> word1 = 'abc' >>> word2 = 'def' >>> word3 = 'ghi' >>> sstr = 'aaabcddd' >>> s = set(sstr.split()) >>> {word1, word2, word3} & s != set() False >>> s = set('zzzzzzz'.split()) >>> {word1, word2, word3} & s != set() False >>> >>815 Pythonって配列無いんじゃ?リストやろ C言語系とかの配列的に添字が0から始まるのはメモリアドレスを計算する時に高速な為 1. {'sss'}.issubset({'s', 'ss', 'sst'}) 2. strings = ('miss') ret = any([s for s in ('s', 'ss', 'ss') if s in strings]) 3. filter(lambda s=s: s in strings, strings) 4. strings = ('ss', ) is_in = strings in ('s', 'ss', 'sss') ヒント 画像情報 テレポート エネルギー 瞬間にどう 観測結果論部あり ※情報とエネルギーを送れるのなら任意の波と線とHzを任意の場所で発生可能 上記の技術に脳内インプラントデータを対象者全身に送信で操り人形 地球外宇宙人もサイコパスが使用中 高度な科学を使用できていても自然環境も人間社会いも狡猾な者【人間を物として見る者】が圧勝 ガスライティング.ギャングストーカー.電磁波攻撃 等 現在の若者サイコパスで無い者は何%いるのかな? 地球派【マイクロ波聴覚効果】は違法でないので宇宙人が行っていても合法 別の惑星はテロに該当なので問答無用で戦争 マイクロ波は波の種類なので X線でマイクロ波を起こしているので お前に200回のx線を打ち込んだも理解できるでしょう ※5Gはミリ波で動的動作も追跡可能になるのでマイクロ波より便利 テラヘルツ波はミリ波と比べて現在不明なので研究中 何Hzの帯域は対象者周囲の状況に応じて変化していると思われるので 線種類 + 波種類 + 何hz + 使用w数 = 音波【音の高さ】? requests.get() したものに対して、 <meta charset= の内容を見てencodingを設定してくれる機能ってある? >>817 その条件では使えない 英文みたいに空白で単語が区切られている時に使える 部分一致はsuffix arrayみたいな重く複雑なsetが必要 ひょっとしたら何かエレガントな書き方があるのかもしれないが >>822 まずdecodeしないでmeta見れるの? apparent_encoding にするといいよという記事をよく見るけど、 encodingに困ってる時にapparent_encoding使うと悪化する 困ってない時は何もしなくていい 結局使い所が無い >>818 高級言語なのにそこにつっこむセンス 速度に影響するから知っておいても損はないけども むしろ内部実装でいうとlistは配列ちがう? >>826 エンコーディングの推論って日本語だとうまく機能しないよな 結局決め打ちして試すしかない 決め打ちしなくても、meta読めばそれが正解なんだよな 答えが書いてあるのに推測しようとして失敗する charsetに嘘書いてある事もあるから metaは参考程度 >>827 なんで配列がリストと同様だと思ったん? 「動的配列は配列じゃないリストだ」と言い張る人なんじゃね? それか何か根本的な勘違いをしてるか まあどうでもいいけど その辺の言葉の使い方は言語や人や実装によって違うからまずは定義をちゃんとして欲しいな 言語も何も指定せずにプログラム関連でリストというと、リスト構造を指すよな 基本情報も持ってないような奴はその辺のデータ構造としての配列とかリスト分かってないんだろ 大抵はリンクリストを指すのだろうけど動的言語あたりが好き勝手用語を解釈し始めて 動的配列を指すこともあるし一般的にモノが並んでいることをリストと言ったりもする ややこしい時代になったもんだ データ構造に言及しない文脈なら一般的に一覧とかリストで済ますでしょ PythonスレはVBAスレに並ぶ初心者が集うスレだからこんな議論が度々起きても仕方ない ごくごく一般的な言葉を環境特有の用語として使う馬鹿が悪い 数学なんかそんなんばっかり わざとだろと思うくらい 俺の投稿GW以降初なんだが馬鹿の自演言い訳扱いにされてんの? read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる