くだすれPython(超初心者用) その45【Ruby禁止】
■ このスレッドは過去ログ倉庫に格納されています
当スレに★Python以外のプログラミング言語での回答類を書くべからず★ ☆「Ruby では」「Rubyでは」をNGワード登録推奨 このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。 ★Pythonのソースコードはそのまま5ちゃんにコピペするとインデントが崩れるので ↓等のてきとうなソースコード用うpろだに貼ってきてください。 スクショをImgur等にうp といった 手抜き(クソ行為)禁止。 ttp://ideone.com/ デフォ設定はC用のため言語選択ボタン押下がピコ手間かも。 ttp://codepad.org/ ほぼ直感的に使える。Run codeボタンあり。 ttp://pastebin.com/ まずまずシンプル。 ttp://dpaste.com/ とてもシンプル。消えるまでの日数は十分長ーく指定のこと。 ttps://jupyter.org/try (旧try.jupyter.org)ちょっとめんどうそう ◆エラーを解決したい場合は、表示されてるエラー全文(勝手に省略禁止)と 実行環境(Pythonのバージョン・OS名・IDEの種類とバージョン)をシッカリ書くこと。 ◇Python公式サイト◇ http://www.python.org/ ◇まとめwiki◇ ttp://python.rdy.jp/ 〇前スレ〇 くだすれPython(超初心者用) その44【Ruby禁止】 http://mevius.5ch.net/test/read.cgi/tech/1563969768/ なんでこの言語は オブジェクト指向なのに 関数で属性を所得することがあるんだ? なんか意図があるのか? 関数で属性を取得したい、という意図があるんだろ それ以上のどういう説明が欲しいんだ 後付けOOPだからしゃーない さらに作者は関数型も嫌いだから中途半端なサポートになってる 初心者に最適みないな煽り で解説書でてるが 宣言いらないし、見た目はシンプルだからこそ 易しい言語ではないな >>299 開発中に変数の型をコードで確認できると便利だろ あとSQLやPandasの各列をfor文で操作する時に、型チェックして分岐をつけることもある この引数受け取って < 又は > を関数側で判断したいんだけど どう記述すりゃいいの? qsort(lambda x, y: x < y, [2, 4, -90, 3, 10]) 単純に変数に入れて出力してみたけど def qsort(a, b): ........print("a= ",a) ........print("b= ",b) 不等号 < > が全く見えません a= <function <lambda> at 0x000001D564F7B4C8> b= [2, 4, -90, 3, 10] >>306 その書き方で間違ってはないよ 渡されたlambdaのソースを確認したいなら import inspectしてprint(inspect.getsource(a)) https://github.com/AmbientDataInc/EnvSensorBleGw/blob/master/src/gw_RPi/env2ambientBS.py これを動かしてみると、 NameError: name 'companyID' is not defined とエラーになってしまいます。 51行目からの関数「def send2ambient(dataRow):」の中の 52行目の if companyID == 'ffff': とif文がありますが、どこにもcompanyIDという変数は見当たらない気がします。 56行目〜59行目、52行目を削除して、53行目〜55行目のインデントを戻せば正常に動きました。 companyIDはどうやって取得するんでしょうか? >>308 多分解決しました value[0:4]にcomanyIDが入っていたので、 77行目でvalue[0:4]も渡して、 51行目の引数にcomanyIDを加えてやると動きました これであってますか? >>307 不等号記号が判断できました ありがとうございます >>3 6 自前でsort_byみたいなのを作るのかな パッケージ、モジュールについて質問です。 import numpy as np a = np.random.rand(10) という記述があったとします。 np はパッケージ random はモジュール rand() は関数 であっていますか? np がパッケージだとすると、パッケージは関数や定数などを含むことができてしまっておかしいような気もします。 このあたりについて解説をお願いいたします。 中身みたらいいんじゃないの? import numpyがPackage import randomがSub-Package randがfunctionってコメント書いてる 質問者の本来の意図は判らんが 質問文だけ読めば import hoge as fuga fuga.hage.hige() の一般的なことを聴いてる可能性もある ケースバイケースとしか言いようがない プログラミング始めて2ヶ月弱です。 今TwitterのsearchAPIを使用してtkinterのメインフレーム内のテキストウィジェットに検索結果を追加していくプログラムを書いてまして threadを使用してリアルタイムに追記させていくことは出来たのですが停止がうまくいきません。 ttps://teratail.com/questions/147319 上記URLの様にスタートとストップを分けて書いているのですがストップ時に止まらず応答無しになります。 tryの前に上記URL内のwhile not stop_flag:を置いてループさせているので ループ中try内のプログラムにif stop_flagがtrueの時にbreakする条件を追加すれば想定道理に動きますでしょうか? 仕事中で詳しくは記述出来ませんがこの考え方で合っているのか確認したく質問させていただきました。 while not stop_flagって書いてるし意味わからんな >>312 気になるのはわかるが 生成の過程はどうであれ オブジェクトが生成された程度でいいとおもうよ ここつついてもなんもでてこない >>314-315 >>320 ありがとうございました。 柴田望洋さんのPythonの本に、 '\\\\\\\\' と入力すると '\\\\' が出力されると書いてありますが、JupyterLab上で実行すると、 '\\\\\\\\' が出力されます。 これはどういうことでしょうか? もう一つ質問させてください。 id(1) とするとある大きな正の整数が出力されます。 オブジェクト「1」のIDだと思います。 ある複雑なオブジェクト(あるクラスのインスタンスなど)にIDが割り当てられているのは理解できます。 おそらくインスタンスを作ったときにIDが割り当てられるのだと思います。 整数の場合にはどうなんでしょうか?我々は整数を使うときに整数のインスタンスを作ったりはしません。 このあたりのからくりについて教えてください。 >>324 id()で表示されるのは実装にもよるが単純にメモリ内のどの位置にそのオブジェクトがあるかじゃなかったかな? いちいちidが割り振られるのは単純にプログラム内で一度出現した値を再度読み込むときにすぐ読み込めるようにするためだった気がする。 id(1)とかだと同じプログラム内だとずっと同じidになっているがid(10000000000000000000000000000000000)とか数値が大きくなると ずっと同じ数値を保持するためには莫大なメモリが必要になるから、いちいち同一のidを保持したりせずに毎回値が変わるのがわかると思う それと、1が整数のインスタンスじゃないというのは勘違いだ。 isinstance(1,int)とすれば整数1が整数のインスタンスだとわかる プログラムする側が明示的にインスタンスを作らないだけで内部的にはインスタンスになっている また、C言語などにおいては整数は「単純な値」と言えなくもないが、少なくともpythonにおいては数値もオブジェクト、 dir(1)してみればわかるが1にもさまざまなメソッドがついている >>322 JupyterでOutに出るのはPythonで表記したときの書き方。 print('\\\\\\\\')すれば\\\\が出る。 >>322 つまりprint('\\\\\\\\')はPythonで表記したものではないと JUpypてrが何か知らんがMacだと¥と\が違うんだろ >>299 え?俺便利だと思って多用してるけど.... 関数側で引数がリストならfor文で引数内の要素で再帰呼出し、リストじゃなければ 引数を処理みたいな感じで使ってる。 (簡単な例を書き込もうとしたらブロックされた...わかりにくくてすんまそん) >>332 たぶんインデントなのと半角英数がいっぱいなのが 先週あたりから強化された全板規制にひっかかる。 >>1 にのってるようなソースコード用うpろだを使うのだ >>332 なるほど 確かに便利だ オブジェクト指向の概念からいえば 関数で属性取得するの邪道だと思っていたが 柔軟にしないといけないな これが純粋性より実用性ってやつか The Zen of Pythonの一部の翻訳についてですが、柴田望洋さんは、 「Errors should never pass silently.」を「エラーを黙って渡してはならない。」と訳しています。 エラーを渡すというようなことが実際にPythonであるのでしょうか? エラーを黙って見過ごしてはならない。 みたいな意味かと思ったのですが。 >>336 pass silently を「黙って渡す」と直訳するか、その行為を日本語の表現で 「見逃す」、「見過ごす」と訳すかと違いと思う。 日本語的には見過ごすと訳した方が自然に感じます。 >>336 の意味であってる 「黙って通過させてはならない」的な意味 「エラーを黙って渡してはならない」は完全な誤訳 Errors should never be passed silentlyや You should never pass errors silentlyじゃないと エラーを渡すという意味にはならない 例外の握りつぶしとかだろ。 例外をキャッチしたけど、何もせずに、そのまま処理を継続したとか Jupyter Notebook(JN)は、Python, Julia, Ruby などで使うIDE だろ。 VSCode みたいなもの Bash, PowerShell などのシェル経由でも、 シングル/ダブルクォーテーションで、エスケープのタイミングが違ってくる。 Linux/Windows で書き方が異なる シェルに渡すときに、既にエスケープされているか、されていないのか エスケープ文字を、エディタで設定できるかも知れない >>335-336 個人的には>>339 の解釈に1票。 try: なんとかかんとか except: pass みたいなマジクソ行為は 自分以外の人物が たとえ0.1×10^23%でもかかわる可能性があるソースコードでは 絶対やっちゃだめだなwww >>340 どんなに小さな確率でも、と言いたいのかもしれないけど巨大な下図になってるぞw >>340 passがダメだとして何なら良いわけ? >>341 可能だが、pyinstallerのような方法で事実上の静的リンクを行った場合には LGPLに従ってpygameが含まれている実行ファイル全体の再配布を許可せねばならない つまり俺が買ったらそれを10円で再販してやる >>344 passを書くくらいならエラー処理せずに普通にエラー発生させた方がマシ >>341 補足 あと、リンクの方法に関わらず、そのソフトウェアを買った俺はそれをリバースエンジニアリングし、改造できる 俺のスキルをもってすればライセンス認証の回避は容易であり、お前はそれを禁止できない すまん、俺が金払って買ったなら認証を回避する意味はなかったな 問題は、ダウンロードは無料だが継続して利用するにはライセンス認証が必要になるというような典型的な配布パターンだ この場合、俺は金を払わずに改造してライセンス認証を突破し、タダでそれを使う そしてその方法をWebで公開する お前はそれを禁止できない なぜならLGPLライブラリを使用しているからだ >>346 つまりtry ~ except は不要と言ってるのか? excaptの中に何を書くのが良いのか訊いているんだが。 >>342 ほんとだ 重要なマイナスが抜けてた! >>340 訂正する ×たとえ0.1×10^23%でもかかわる可能性があるソースコードでは 〇たとえ全世界の砂粒から、ハズレの1粒をひきあてたくらいの確率でも、かかわる可能性があるソースコードでは >>349 「except:」みたいな雑なくくりをせず おきるエラーの種類ひとつひとつについて 「except Errorhogehoge:」みたいなかんじで一個ずつちゃんと分岐させろ >>350 例外の種類ごとに異なる対処が必要なら分岐するがそうでないならその限りではない。 何か対処すべきことがあればそれを記述するが他にすることがなければpassでよい。 おまえさんは何か変な教条主義に囚われているんではないかね? >>350 悪いけど、最初から個別の例外について虱潰しに対応しようとするのは典型的なアンチパターンだよ あまりにも手間がかかりすぎるし、変更に対して非常に弱いコードになる。 例外処理で死守すべき大原則は、アプリを落とさないこと、綺麗に回復すること、の2点だけだ。 その上で、必要に応じて丁寧な個別対応をしてもよい。 まずアプリを落とさないことだが、WebのリクエストハンドラであったりUIのイベントハンドラであったりバッチ処理の一番大本のループであったり、 「ここまで戻れば確実に回復できる」という箇所で全ての例外をキャッチし、リトライやエラーメッセージの表示等を行って回復する。 次に綺麗に回復すること、これは、適切にwithやfinally等を使用して例外発生時に適切な後片付けを行うことだ。 この2点が守れていれば例外処理は完璧だが、場合によっては個別対応することで早期に回復できたり、より適切なエラーメッセージをユーザーに表示できたりするケースがある。 しかしそれはあくまでオプションにすぎない。 >>351-352 え、お前らマジでこんなコード書いてるの!? いろいろビックリするわ try: ____do_something() except: ____pass Ruby on Rails で、RSpec で、TDD から学びなおせw >>353 単に無視することが適切な回復なのであればそれで正しいよ 大抵はそうではないが、だからといって例外が発生した瞬間に直上でキャッチしたところで対処のしようがないケースがほとんど ほとんどの例外は単純にキャッチせずにスルーし、上の方で纏めてキャッチしてエラーを表示したりすることになる >>348 ありがとうございます。ようするにpygameを使った作品は著作権を放棄しろってことなんですね。。。 >>355 範囲の狭い特定のエラーを意図して無視するのが適切な場合はあっても あらゆるエラーをすべて無視するのが適切な場合はまずないやろ >>356 細かいツッコミすると、国内で放棄できるのは著作請求権だけ 著作権を放棄しているわけではない 自分の著作権の下で自らの著作物をLGPLの派生物として配布しているんだ 自分の著作物をどんなライセンスで配布しようが本来は勝手だが、利用しているライブラリが他人の著作物である以上、 そのライブラリの著作権を同梱した派生物を配布するためにはそのライブラリの著作権者が定めるライセンスに従わねばならない そして、そのライセンスが派生物のライセンスを制約するようなものであった場合は結果的に自分の著作物にライセンスが感染する形になるわけだ >>360 そういうことなんですね! 勉強になりました。 俺が不勉強なだけかもしれないが try:〜except:passでエラーを握りつぶしておいて 直上でエラー処理するってどういうことだ? 普通にエラーをそのままにしといたら呼び出し元にエラーが届いて そこで処理したらいいだけの話だろ 一番下の階層でpassして握り潰す必要はない >>362 > try:〜except:passでエラーを握りつぶしておいて 誰がそんなことを言ってるんだ? そう思い込んでいるのはあなただけでは 異常系をわざわざ戻り値で表現し直すんじゃないの?w そんなことするより、リスローの方が絶対にいいわな。 pyautoguiっての普通に使ってる時は問題ないんだけど リモートデスクトップで1度開いちゃうと画面閉じた時に pyautoguiの中のsetcursorposってのでエラー出るんだけどどうにかならない? 大企業で無料で商用利用できるIDEでオススメありませんか? 個人ではVScode使ってますがエンタープライズ企業は無償利用無理みたいです >>367 そんな都合のいいものはない 大企業税(有名税てきな)だとおもって あきらメロン >>367 VSCodeはエンタープライズでも無償だぞ >>357 堅牢なソフトウェアを構築する方法論として、何かエラーがあったらその処理単位ごと 無かったことにするというものがある。DBのトランザクションとかerlangのlet it crashとかな。 そういう方法論ではエラーの種類など見ない。 そこでは逆に、知ってるエラーだけcatchして他はスルーするという手法こそ否定される。 なぜなら、下層のルーチンが「知らない」とスルーしたエラーなら上層のルーチンは 「もっと知らない」はずだからな。 >>372 ものすっごい中途半端な知識で知ったかしようとする前に基礎を抑えようね DBのトランザクション処理を実行しました なんかエラー発生しました エラーの種類など見ないっ(キリッ) 軽量プロセスにsend messageしました なんかプロセス落ちました リスタートあるのみ(キリッ) >なぜなら、下層のルーチンが「知らない」とスルーしたエラーなら上層のルーチンは >「もっと知らない」はずだからな。 何を知らないのか考えようね >>372 のやり方だと「止まらない」プログラムは作ることはできても 「使える」プログラムは作れそうにないなw pyautoguiのsetcursorposエラーはtry:〜except:passで無事解決しました! >>349 漏れもpassは禁止で正しく処理するべきだと考えるが どうしてもスルーしてプログラムを続行したい場合は 1.フラグを立ててプログラム終了時に報告 2.loggerでsyslogに出力 3.上の1と2の合わせ技 >>355 上の方でまとめてキャッチしたいのに except で pass したらキャッチされないぞ except でその場だけキャッチせず上にスルーしたいならあらためて raise しろ pyautoguiでとりあえずブラウザ内の手作業のの自動化できたから、seleniumにも手を出してみたけどこっちは難しいね HTMLが分かってないとキツイな(´・ω・`) python勉強しようと思うんだけどエディタはjupyterがデフォなの? visual studioになれてるからvs使いたいんだけどまずいのかな。 >>383 PCのスペックが足りてて問題なく動けば問題ないぞ スペック足りない俺様PCでは 秀丸エディタかsakuraエディタが精いっぱいなんだぜ >>383 VSCodeにしとけ MSはPythonの開発環境としては今VSCodeを推していて、本家VSの方のPythonサポートはもう将来性がない >>380 >漏れもpassは禁止で正しく処理するべきだと考えるが passは正しい処理ではないと言っているようだが、そう断言できる根拠はないだろ。 ログを吐けばオーケーというのも意味わからん。プログラムの正しさとは何の関係もないだろうに。 保守性が落ちるコードは正しいコードとはいえないだろ 例外処理でpassするくらいならそもそも例外が出ないようにすべきだし 自分で例外処理が書けないなら例外をそのまま発生させて別の誰かか未来の自分が対処できるようにすべき 自分ひとりで全部完結するプログラミングなら 他人から見てエラーを脳死で握りつぶしているのか 面倒臭くてpassしてるのか分からない変なコード書くのもありかもしれないけどな ぶっちゃけ「正しいコード」が書きたいならpythonじゃなく証明型プログラミング使えばいいだけだしな 正しい処理どうこうの前に passは文字通り何もしてないんだから処理したとは言わないだろ >>389 > 例外処理でpassするくらいならそもそも例外が出ないようにすべきだし > 自分で例外処理が書けないなら例外をそのまま発生させて別の誰かか未来の自分が対処できるようにすべき > > 自分ひとりで全部完結するプログラミングなら > 他人から見てエラーを脳死で握りつぶしているのか > 面倒臭くてpassしてるのか分からない変なコード書くのもありかもしれないけど ↑イイ!!(・∀・)こと書いてある!!! >>389 >例外処理でpassするくらいならそもそも例外が出ないようにすべきだし なんか言っていることが矛盾してるね。自分ひとりで全部のコードを書いているわけじゃなけりゃ 下層のルーチンから例外が出ないようにするなんてことが常にできるわけがないだろう。 自分で保証できるのは上流の呼び出し元にどういう例外を渡すか(渡さないか)だけ。 >他人から見てエラーを脳死で握りつぶしているのか >面倒臭くてpassしてるのか分からない変なコード書くのもありかもしれないけどな 意図がわかりやすいコードを書くことが推奨されるのはもちろんだが、逆にコードだけからは 意図を判断しづらいケースはいくらでもあるわけなんでそこを非難しようとしても不毛なだけだと 思うがな。 例えば逆のケースで例外をcatchしていないコードがあった時、それが意図的にスルーして いるのか面倒くさいからかcatchしなかったのかはたまた例外が発生する可能性を見過ごして いたのか、コードの字面だけからはやっぱり判断できんだろう。 そもそも、面倒くさくて握りつぶすという発想がよくわからんな。 面倒くさいなら何もしないでスルーするんじゃないの? #Javaの話で関数の仕様を変えられないから、とかならわからんでもないが。 >>392 下層で例外を上に渡すのか渡さないのか決めるなら 例外処理をどうするのかを上層で判断するのか下層で判断するのか 結局どちらでもない中途半端になるだけだな 上層に例外処理を任せるなら 例外を握りつぶしにしても上層で握りつぶす 例外が出る可能性を消せないのであれば例外を隠蔽しない 例外を隠蔽するくらいなら例外が出る可能性を完全に消す 単純な話だ >例えば逆のケースで例外をcatchしていないコードがあった時、それが意図的にスルーして >いるのか面倒くさいからかcatchしなかったのかはたまた例外が発生する可能性を見過ごして >いたのか、コードの字面だけからはやっぱり判断できんだろう。 このうちのどれかなんて判断しなくていい 全部対処の必要があるからな 君は「問題なく動くコード」を作ることを最優先にしているようだがそのために「問題を起きていないことにする」んじゃあ意味がない 起きてない問題を解決するのは起きている問題を解決することの数倍難しいんだ エラーが発生すること自体は開発の過程においては別に悪いことじゃない エラーを見かけ上発生させなくなることで問題を不可視にするほうが害悪 >上層に例外処理を任せるなら 例外を握りつぶしにしても上層で握りつぶす その例外を発生させた処理に近い方が適切な判断ができるに決まってるだろう。 どういうメリットがあってその処理を上層に任せるなんて言ってるのかねえ。 >エラーを見かけ上発生させなくなることで問題を不可視にするほうが害悪 こうなるともう宗教だな。 仮に内部でエラーが起きたとしても、それが外に対して悪影響を及ぼさないんだったら 無かったことにして全然問題ないと思うが。 外に悪影響を及ぼさないことを保証できる実力があるなら文句ないわ 俺にはとても出来ない ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる