1 名前:デフォルトの名無しさん mailto:sage [2021/12/27(月) 01:38:10.93 ID:GepmXCuJ.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/ ほぼ直
784 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 23:04:40.03 ID:wSEx/joO.net] >>769 まず基本的な型になれるといいよ ミュータブル イミュータブル シーケンス
785 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 23:06:36.28 ID:PionEwfV.net] a = soup.find_all としたときにaをa0とかa1のように あらかじめfor i in range(2):で生成される数値を入れたいのですが。 前もってb=a+str(i)=a0として b= soup. とできますか?
786 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 23:30:24.72 ID:2isIGBT3.net] aやa0/a1は字面こそ似てるけどPythonからすると全く関連のない識別子で統一的に扱えなくなる listとして単一の変数で扱うのが筋 a = [] # list a.append(soup.find_all(…)) 急がば回れでまず公式チュートリアルをやるべき
787 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 23:41:19.59 ID:PionEwfV.net] ご教授有難うございます
788 名前:デフォルトの名無しさん [2022/04/20(水) 23:42:38.34 ID:LGsJlZ4G.net] subprocess.Popenで動かしたものの出力を拾いたいのですが文字化けしてしまいます どうすれば文字化けが治りますか? windows 10 python2.7で3.10の.pyを動かしています 2.7のほう(GIMP python コンソール) p = subprocess.Popen(('C:\\Users\\aa\\AppData\\Local\\Programs\\Python\\Python310\\python.exe C:\\Users\\aa\\Desktop\\oyo.py'), stdout = subprocess.PIPE, shell=True) line = p.stdout.readline() line 3.10のoyo.py #!/usr/bin/env python # -*- coding: utf-8 -*- print("あいう") 結果 あいうが'\x82\xa0\x82\xa2\x82\xa4\r\n'になってでてきますorz
789 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 23:49:59.94 ID:5YAs/nU7.net] もうPython2覚えてないや line.decode('cp932') かな?
790 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 23:53:10.20 ID:CqlWpUmw.net] >>773 何のためにそんなことしたいの? 前にも似たようなこと書いてた人がいたけど 変数名を連番で生成してそれらに代入したくなる状況が想像できないので理由を説明してくれると助かる
791 名前:デフォルトの名無しさん mailto:sage [2022/04/20(水) 23:59:08.90 ID:2isIGBT3.net] >>778 > 前もってb=a+str(i)=a0として こうメタプロ的に解決しようとかんがえたんだろ なんでわからん
792 名前:776 [2022/04/21(木) 00:06:54.28 ID:EXXirMvu.net] >>777 文字が増えるだけで普通の文字になってくれないです line.decode('cp932') u'\u3042\u3044\u3046\r\n'
793 名前:デフォルトの名無しさん mailto:sage [2022/04/21(木) 00:31:19 ID:68zG9eph.net] >>780 ちゃんと「あいう」とUnicode文字列で保持できてる そのGIMP環境で日本語がprintできる前提で >>> '日本語'.decode('cp932') がエラーなしなら >>> print u'\u3042\u3044\u3046\r\n'.encode('cp932') でとおるはず 環境によりcp932はutf8他かもしれんが
794 名前:デフォルトの名無しさん mailto:sage [2022/04/21(木) 00:38:42.33 ID:Qeso+L0D.net] >>776 最後2行 line = p.stdout.readline().decode('cp932') print line で表示できるはず
795 名前:776 [2022/04/21(木) 00:53:13.48 ID:EXXirMvu.net] >>781 >>782 GIMPコンソール上では line.decode('cp932')で u'\u3042\u3044\u3046\r\n' とでてたんですが メッセージボックスだしたら gimp.message(line.decode('cp932')) 日本語表示されました。 よくわからないですがそういう文字の扱い?みたいです おさわがせしました ありがとうございます
796 名前:776 [2022/04/21(木) 01:54:42.76 ID:EXXirMvu.net] もう一つ質問なんですが stdoutで他の.pyで動かした出力が受け取れたんですが 他の.pyに入力を与えてその結果出力を受け取るにはどうしたらいいんでしょうか? 検索しても p = subprocess.Popen(('C:\\Users\\aa\\AppData\\Local\\Programs\\Python\\Python310\\python.exe C:\\Users\\aa\\Desktop\\oyo.py'), stdin=subprocess.PIPE,stdout = subprocess.PIPE, shell=True) みたいに stdin=subprocess.PIPE を追加するみたいなんですが、入力する変数はどこに書けばいいのか 入力を受け取る側の.pyではどうやって受け取るのか分からなかったです
797 名前:デフォルトの名無しさん mailto:sage [2022/04/21(木) 02:05:23.23 ID:Qeso+L0D.net] >>784 .communicate(input=変数)
798 名前:746 mailto:sage [2022/04/21(木) 06:31:01.36 ID:EXXirMvu.net] >>785 ありがとうございます 入力を受け取る側の.pyではどうすればいいんですか?
799 名前:デフォルトの名無しさん [2022/04/21(木) 09:46:00 ID:v468I8x9.net] ターミナルから以下を入力すると問題なく実行できるのに、 ファイルcalendar.pyに保存して実行すると TypeError: 'module' object is not callableになるのは何故でしょう? import calendar print(calendar.calendar(2022))
800 名前:デフォルトの名無しさん [2022/04/21(木) 09:48:00 ID:v468I8x9.net] すみません自己解決しました。 calendar.pyの名前が被ってるからのようですね。
801 名前:746 mailto:sage [2022/04/21(木) 17:49:56.13 ID:EXXirMvu.net] 自己解決です 受け取る側にinput()で出来ました
802 名前:デフォルトの名無しさん [2022/04/21(木) 19:03:12.96 ID:FRtLfLsM.net] import tkinter でTtkが読まれないのは仕様だそうですが、いまいちしっくりこないんですが単なるインポートでコレが読み込まれるとか(Ttkのように)読み込まれないとかはどこで知ればいいのでしょうか?
803 名前:デフォルトの名無しさん mailto:sage [2022/04/21(木) 19:17:14.76 ID:gmJJNdw9.net] >>790 from tkinter だとtkinter以外インポートしないから from tkinter import * のときってこと? それなら tkinter.__all__ でわかる
804 名前:デフォルトの名無しさん mailto:sage [2022/04/21(木) 19:20:14.88 ID:gmJJNdw9.net] https://docs.python.org/ja/3/library/tkinter.ttk.html Ttkって拡張があるんだね これは個々の事情なので知ってないとわからないけど ここに書いてるし説明くらい読もうよしかいえん
805 名前:デフォルトの名無しさん [2022/04/21(木) 20:19:47 ID:YKw8btnC.net] import tkinter as tk import tkinter.ttk as ttk imporr tkinter.messagebox as tkmb import tkinter.filedialog as tkfd 俺が普段使うセット from tkinter import * from tkinter import ttk は推奨しない 一部のウィジェットはtk版のが使いやすかったりするから オーバーライドされてほしくないのだ
806 名前:776 [2022/04/22(金) 01:33:52.51 ID:llHCzfDa.net] >>776 です input()で入力を受け取ったpython3.10の方が文字化けしてしまって 自分なりにはいろいろencode,decode試したんですが うまくいかなかなかったです 文字化けを直すにはどうしたらいいですか? GIMPコンソール上の入力(python2.7) import subprocess input_text = 'あいう' line="" p = subprocess.Popen(('C:\\Users\\aa\\AppData\\Local\\Programs\\Python\\Python310\\python.exe C:\\Users\\aa\\Desktop\\ohayo.py'),stdin = subprocess.PIPE, stdout = subprocess.PIPE, shell=True) line=p.communicate(input=input_text)[0] print line python3.10の.py #!/usr/bin/env python # coding: utf-8 from tkinter import messagebox text = input() messagebox.showinfo("moji",text) ↑このメッセージボックスの中身が 画数の多い漢字と記号に化けてしまいました コピペできなかったので画像付けます https://dotup.org/uploda/dotup.org2781923.jpg.html
807 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 02:34:21.05 ID:I15ojW8g.net] >>794 line=p.communicate(input=input_text.encode('cp932'))[0].decode('cp932')
808 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 12:16:08.09 ID:j0HvfQsZ.net] >>778 テーブルを美汁でとるとき一行づつdictしてconcatinationするときに使えないかと思い
809 名前:デフォルトの名無しさん [2022/04/22(金) 13:23:31.05 ID:sHpgXsI/.net] アナコンダかをインストールして混ぜるな危険のpipとコンダをやってしまい壊れた pip一本化で問題ないですか?
810 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 13:38:07.44 ID:EkSdB4ug.net] 一本化で問題ない
811 名前:デフォルトの名無しさん [2022/04/22(金) 14:13:32.13 ID:sHpgXsI/.net] サンクス
812 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 14:37:59.91 ID:53M5rCU+.net] クラスを書いているとき中身が肥大化して __init__関数の引数が膨大な数になって インスタンスを作るのが大変な状態になってしまったとき リストでよく使うひな型をいくつか書いておいてそれを渡すという解決法を考えたのですが 妥当なやり方でしょうか?また他に良いやり方があればお教え願います
813 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 14:45:24.17 ID:CAe1t8bi.net] >>800 デザインパターンでググる
814 名前:デフォルトの名無しさん [2022/04/22(金) 16:00:19.34 ID:3+eT3Tts.net] >>800 >クラスを書いているとき中身が肥大化して >__init__関数の引数が膨大な数になって インスタンスを作るのが大変な状態になってしまったとき どんな状態?
815 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 16:08:00.83 ID:EkSdB4ug.net] プロセス起動するためのクラス作りたいな。で最初は実行ファイルのexeパス指定だけのシンプルなclassだったけど arg追加しよう、ワーキングフォルダ指定、起動時最小化オプション追加、管理者として実行オプション・・・ 引数が膨大になってくってことだろ
816 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 16:15:58.67 ID:p48HHJp5.net] >>79
817 名前:6 なるほどわからん >>774 の言うようにコレクションをコレクションのまま扱う感覚を身につけたほうがいいのかもしれない htmlテーブルをdictionaryにしたいならthの構成に合わせてlistやdictにする(もしくはpandasのread_html) https://www.w3schools.com/html/html_tables.aspのtable#customersなら header = [ th.text for th in table.select('tr:first-child > th')] result = [ {header[i]: td.text for i, td in enumerate(tr.select('td'))} for tr in table.select('tr')[1:] ] print(result[2]['Country’]) # Austria [] [ここ壊れてます]
818 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 17:12:11 ID:DFy/+sOR.net] 何でもやらせるほどsubprocessの極薄ラッパーになっていって 最終的にいらねえじゃんってなる
819 名前:デフォルトの名無しさん [2022/04/22(金) 18:54:56.60 ID:vYYyAoJX.net] 1スレを読んでみようと思ったのですが一つ一つリンクをクリックして戻った結果途中で"rawを読み込めませんでした"と言われこのスレに戻されてしまいました。どなたかこのスレの1を読む方法教えて頂けませんか
820 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 19:13:49.15 ID:CAe1t8bi.net] >>806 2ch → 5ch
821 名前:デフォルトの名無しさん [2022/04/22(金) 19:48:10.24 ID:vYYyAoJX.net] >>807 ありがとうございます! 5ちゃんねるの"くだすれpython"の現行版から過去のスレのリンクを辿ってみました part34辺りで5chから2chのログに切り替わっているせいかリンクを読み込もうとしなくてロード出来ませんでした スマホからだと読むことは出来ないと言うことでしょうか
822 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 20:17:22.51 ID:a0+aRfgz.net] 便所の落書き読む時間があるなら書籍の一冊でも読んだほうが有意義だぞ
823 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 20:24:41.56 ID:h+Fap4CC.net] >>803 > ワーキングフォルダ指定、起動時最小化オプション追加、管理者として実行オプション・・・ そう言うのはプロパティとかでいいだろ > 引数が膨大になってくってことだろ 毎回全部指定するつもりなのかよw
824 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 20:59:16.35 ID:cNb4vicF.net] 毎回全部指定したい(指定強制したい)ってことはあるからな
825 名前:デフォルトの名無しさん mailto:sage [2022/04/22(金) 21:03:59.41 ID:7tkDjHFj.net] >>811 ラッパー経由になるだけだから指定強制なんて意味ないでしょ
826 名前:デフォルトの名無しさん [2022/04/22(金) 21:20:42.63 ID:72MHsUfr.net] >>800 はまだ>>800 しか書いてなくて、後は>>803 の憶測について議論してるんだよね?
827 名前:746 mailto:sage [2022/04/22(金) 21:33:54.80 ID:llHCzfDa.net] >>795 ありがとうございます! 出来ました!! エンコードとデコード両方しないと行けないのですね 助かります!!
828 名前:デフォルトの名無しさん mailto:sage [2022/04/23(土) 18:41:33.50 ID:yaJafia3.net] テキストファイルの先頭からあるワードを検索し 1回目に見つかったワードを特定のワードに置換 2回目に見つかったワードをまた別のワードに置換 … という処理を実装したいです 自分の知識だと、テキストを一行ずつ読み込んでは 正規表現でワードをサーチしカウンタを加算し カウンタ値に応じてreplaceするっていうコードしか浮かばないですが 何か他に効率的・定番的な書き方があれば教えてください
829 名前:776 [2022/04/23(土) 21:11:23.83 ID:S27JpXaa.net] 度々すみません。 >>794 で教えてもらった以下の行を入れたのですが line=p.communicate(input=input_text.encode('cp932'))[0].decode('cp932') 中国語(繁体語)をinputに入れたところ以下のエラーがでてしまいます UnicodeEncodeError: 'cp932' codec can't encode character u'\u91d9' in position 0: illegal multibyte sequence 検索してみたところcp932に含まれない文字があった場合にでるみたいです u'\u91d9'はこの字でした(釙) https://0g0.org/unicode/91D9/ 中国語(繁体語)をinputに送っていたので 以下を参考にエンコードをcp932ではなくてcp950にしてみたのですが文字化けしてしまします docs.daemon.ac/python/Python-Docs-2.5/lib/standard-encodings.html 他にbig5やbig5hkscsも試してみましたが文字化けします この文字化けはどうしたらちゃんと表示されますか? こういった多言語を扱う場合どうしたら良いのでしょうか? u'\u91d9'(釙)以外にもu'\ufe50'(﹐)などにも引っかかってしまします
830 名前:デフォルトの名無しさん mailto:sage [2022/04/23(土) 21:38:30.92 ID:LTun4BN3.net] >>815 そんな一般性もないような使い捨てのコードは効率よりわかりやすさが大事 文章そのままにコーディングしたらええがな
831 名前:デフォルトの名無しさん mailto:sage [2022/04/23(土) 22:06:21.75 ID:A38Z8Utb.net] >>815 1行ずつ読み込みだとキーワードの途中改行に対応できない気がするけどいいの?
832 名前:デフォルトの名無しさん mailto:sage [2022/04/23(土) 22:33:39.38 ID:7+1nJnMo.net] 途中改行するキーワードなんて生まれてこのかた見たことない
833 名前:デフォルトの名無しさん mailto:sage [2022/04/23(土) 22:48:08 ID:dSfqqc1i.net] >>816 Windows の文字コードは、独特で誰も知らない。 たぶん、何百種類もあるでしょ 日本なら、CP932 だけに対応するけど、 全世界の何百種類とかに対応できない そもそも、外人はCP932すら知らないし CP何々とか、UTF-16 とか、Linux 用の全言語で処理できない。 Linuxは全言語、UTF-8 のみに統一されている これ以外の特定の端末用言語、例えば、Windows PC 用言語などは、特殊 だから基本、システムで使ってはいけない。 システムはLinuxのみで、Windows PCは単なるクライアントとしてしか使えない Ruby on Rails では辞書に定義することで、多言語化しているけど、 これはUTF-8だからできる この文字はCP932、これはCP950 とか一々、何百種類に対応できない
834 名前:デフォルトの名無しさん mailto:sage [2022/04/23(土) 22:49:34 ID:Ac8uMNgs.net] 置換だと検索文字として\n含むのはよくあるし キーワードに改行なくてもワードラップがきちんとされてないテキストなんかだと改行コードに邪魔されてヒットしないこともよくある そういうとこはやりたいことの条件しだいだからなんともだな
835 名前:デフォルトの名無しさん mailto:sage [2022/04/23(土) 23:04:11.07 ID:ll5AWkFj.net] >>815 re.subの引数に呼ばれるたびにカウントアップした文字列を返すreplacerを渡してやればいい
836 名前:デフォルトの名無しさん mailto:sage [2022/04/23(土) 23:15:47 ID:pT174lS4.net] >>820 もうlocale知らん奴がいるんだなぁ
837 名前:デフォルトの名無しさん mailto:sage [2022/04/23(土) 23:29:24.04 ID:OEg3OW8V.net] >>816 これでどうだろう import subprocess, os my_env = os.environ.copy() my_env["PYTHONIOENCODING"] = "cp65001" input_text = 'あいう釙' line="" p = subprocess.Popen(('C:\\Users\\aa\\AppData\\Local\\Programs\\Python\\Python310\\python.exe C:\\Users\\aa\\Desktop\\ohayo.py'),stdin = subprocess.PIPE, stdout = subprocess.PIPE, shell=True, env=my_env) line=p.communicate(input=input_text)[0] print line 後出し条件追加は控えてくれると助かる
838 名前:デフォルトの名無しさん [2022/04/24(日) 00:03:00.76 ID:XmcVNZmY.net] > お前は毎朝起きるたびに俺に負けたことを思い出すよ^^ あー、ホンッとに思い出すなあ(笑) キチガイの嘘つきの低レベルFランの、 朝鮮ゴキブリBot君は、 チョン独特の「なにもできないけど俺のほうがジャップより偉い!」的な ことはよーくわかったよ。 ホントなにもできない朝鮮ゴキブリBot君! クソチョンw クソチョンはウンコを食べる糞食人種w クソチョンはゲリ便をじゅるじゅると うまそうに食うw
839 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 00:16:33.35 ID:JO+3K+yc.net] >>824 my_env["PYTHONIOENCODING"] = "utf-8" のほうがわかりやすいかな
840 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 00:25:04.32 ID:lQs7d+0h.net] 外部コマンド前提だから古典Unix的に 間にiconvを挟むのが適当
841 名前:776 mailto:sage [2022/04/24(日) 12:08:29.52 ID:kM/BqeMC.net] >>824 ありがとうございます こんな方法があるんですね 驚きました まさか外国語も色々エンコードあるなんて思いもよらず 後出しになってすいませんでした >>827 どこにiconvというのを入れればよいのですか?
842 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 12:48:07.19 ID:PxrfmSzI.net] >>828 https://man.cx/iconv(1)/ja こういう外部コマンドがある。(ないなら導入する) python310.exe UTF-8出力するscript.py | iconv -f utf8 -t cp932 でcp932で出力するコマンドと同等になる。前に置くと入力も変換できる。 わかるとおもうがパスやエンコーディングは適当に読み替えて
843 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 13:28:31 ID:JO+3K+yc.net] 多言語処理するなら、824の方法でいいよ iconvなんか使ったらエラー処理面倒くさくなる 他には、バッチファイルでchcp 65001する方法や、utf-8のファイルで受け渡す方法もある
844 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 14:10:53.30 ID:QXI/jpLW.net] いいわけないだろw utf8決め打ちだけでいいなら苦労しない
845 名前:デフォルトの名無しさん mailto:sage [2022/04/24(日) 14:36:36.75 ID:JO+3K+yc.net] >>831 なら、794の処理を動く形でコード書いてよ 見て判断するよ
846 名前:デフォルトの名無しさん mailto:sage [2022/04/29(金) 22:25:05.85 ID:ir2De51z.net] Python関連から少し外れてしまうのですが、元々汎用系の技術者だったのですが、縁があってデータ分析の仕事に関わることになりました。 現在python3を手続き型の書き方でコード書いているのですが、オブジェクト思考に切り替えた方が良いタイミングやポイントありますか? 今のところ一人でpandasやpysparkを処理していて100行にも満たないくらいの小規模開発しています。 オブジェクト思考に憧れはあるのですが、まだ書いたことはありません。
847 名前:デフォルトの名無しさん mailto:sage [2022/04/29(金) 22:35:36.96 ID:5b8jykvI.net] ( ^ω^)汎用って何が汎用なんですかお?
848 名前:デフォルトの名無しさん mailto:sage [2022/04/29(金) 22:38:14.23 ID:ir2De51z.net] >>834 具体的にはコボラーメインでした
849 名前:デフォルトの名無しさん mailto:sage [2022/04/29(金) 22:41:18.84 ID:GNyXlK50.net] >>833 切り替える必要はありません オブジェクト指向は大規模開発を大人数で共有しながら進めるために 編み出された作法です そんなプロジェクトにPythonは使われません
850 名前:デフォルトの名無しさん mailto:sage [2022/04/29(金) 22:42:40.76 ID:ufUUo1o1.net] 今どきオブジェクト指向は…
851 名前:デフォルトの名無しさん mailto:sage [2022/04/29(金) 22:55:21.47 ID:ir2De51z.net] >>836 そうなのですね 可読性とか設計的にオブジェクト思考の方が優れているイメージがあり、汎用系出身のプログラマーとしては劣等感を感じています >>837 最近の流行り=メインストリームは何でしょう?
852 名前:デフォルトの名無しさん mailto:sage [2022/04/29(金) 22:59:31.83 ID:NGFGt/bW.net] >>836 > オブジェクト指向は大規模開発を大人数で共有しながら進めるため そんなことないだろw 継承とか具体的に使い始めるとたぶん 目からうろこだろ感動もんだろ鳥肌もんだろ汎用系からだと
853 名前:デフォルトの名無しさん mailto:sage [2022/04/29(金) 23:40:25.60 ID:Sf8HNHhp.net] 疎結合進んでひとりでも大規模開発できるようになるし 小規模でもアタマ楽になるし学習コスト顧みても利点の方が多い
854 名前:デフォルトの名無しさん mailto:sage [2022/04/29(金) 23:51:51.09 ID:ir2De51z.net] >>840 仕事中は時間の誓約もあるので手続型でコード書いちゃって、プライベートでは作りたいものなくてオブジェクト指向の本読んでも分かったような分からないような感じで実践できていません 皆さんはオブジェクト指向はどうやってマスターしましたか? デザインパターンの本を写経するのが一番なんですかね。。。
855 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 00:19:27.73 ID:bO9itIdJ.net] >>838 よほどクラス設計をきちんとやっておかないと可読性はむしろ落ちます 自分で書いたクラスでも三日経てばわからなくなります 結局のところ手続型で上から下に一直線にゴリゴリ書く方が速いし手直しも楽です ただしオブジェクト指向は作法ですから、チームが作法として採用している場合は致し方ありません が、先に述べたようにPythonでチーム開発などすることはまずありませんからご安心を
856 名前:デフォルトの名無しさん [2022/04/30(土) 00:49:48.45 ID:46aR4GCy.net] データ分析を書き下しでやるなんて聞いたことない どんな小規模よそれ
857 名前:デフォルトの名無しさん [2022/04/30(土) 01:24:52.50 ID:03xdZc7H.net] データ分析で100行に満たないとなると、オブジェクト指向じゃないと思うけどなあ. レコード同士の制約がRDBMSで取り扱えない範囲の制約だったらオブジェクト指向にした方がいいけど、 大体RDBMS的アプローチで十分じゃない? 分析手法が固まった段階で業務にいれこむとなるとちゃんとオブジェクト指向にした方がいいと思うけど、分析の段階だとPOCでしょ
858 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 02:13:55.43 ID:TTQ8Rhtz.net] 典型的なオブジェクト指向は、Ruby on Rails でも、最近の言語、Go, Rust, Elixir などは、オブジェクト指向ではない。 オブジェクト指向の弊害の方が目立ってきたため Elixirは関数型
859 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 02:19:59.25 ID:38aggrlO.net] 頭の中で完結してるけど説明が下手なのか 書くうちに発散して纏まってないけどそのまま殴り書いたか ようわからん文章やな
860 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 02:22:55.20 ID:Zvv3yApT.net] ぶっちゃけSQLとパワークエリで事足りると思うんですが、会社がPythonメインでやるという方針なのでPython使ってます。pandasもpysparkもデータ分析用というより大量データの結合やデータ変換に使うことが多いです。 環境的には不要で自己満になるかもなのですが、今後のスキルアップのためにオブジェクト指向取り入れて開発したいなぁという願望があります。
861 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 02:25:25.49 ID:MSWmTJKz.net] おまえら素人ばかりだな オブジェクト指向で作るのは理由があるからだ 理由は自分で考えろ
862 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 02:26:46.14 ID:Zvv3yApT.net] >>845 Elixeir初めて聞きました。新しい言語や関数型言語も出てきているのですね。。。
863 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 02:26:52.93 ID:MSWmTJKz.net] pythonメインでやる方針にも理由がある 理由は自分で考えろ
864 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 02:27:36.14 ID:MSWmTJKz.net] とにかくやれ やらない理由はいくらでもあるから とにかくやる気があるうちにやるんだ
865 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 02:34:17 ID:MSWmTJKz.net] やってみて わからなかったらいつでも質問しておいで
866 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 02:37:35 ID:Zvv3yApT.net] ありがとうございます とりあえず挑戦してみます
867 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 05:55:28.21 ID:OR8SZm5l.net] >>835 COBOLに慣れてるならGnuCOBOLでも入れて色々遊んでみたらいいんじゃね? COBOL2002からはオブジェクト指向をサポートしてる
868 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 06:14:48.85 ID:Zvv3yApT.net] >>854 COBOLでもオブジェクト指向サポートしてるバージョンあるんですね! 時代の進歩に全然追い付けてないです
869 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 08:21:56.93 ID:nLS5ACA1.net] 妙だな…Pythonでチーム開発とか普通にあるけど
870 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 08:29:49.76 ID:mj6Qj3Uj.net] >>856 日本だと少ないとはいえ、チーム開発も少しずつ増えてきてるよな というか規模の大きな開発が増えてきたから 型ヒント周りの機能が強化されてきてるんだし
871 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 08:48:06.80 ID:UlwKMlAZ.net] YouTubeやDropboxがPythonで書かれてるけど、1人で開発されたなんて考えてんのかね、>>842 は https://tech-camp.in/note/technology/45702/ DropboxのRian Hunter氏は「PyCon APAC 2013」で、Dropboxは全てPythonで開発していると述べています。コード量はサーバとクライアントのコードを全て合わせて93万7707行。
872 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 08:55:29.45 ID:0pJ/3NeQ.net] 一般的にpythonがーじゃなくて、そいつが職場で開発してるって条件下では大規模開発はありえないって話だろ
873 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 09:46:12.98 ID:2kJdiTOr.net] >>842 の気持ちはわかる たぶんバッチ処理主体でPythonを使ってる現場なんだろうけど、バッチ処理しか書けない奴って本当に一直線のコードしか書けないのよ 最近は業務系のそういう連中がPythonに進出してきていて、なかなか酷い状況だよ
874 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 12:04:18.69 ID:asMkUOFh.net] 一般常識として身につけておいたほうかがいいとは思うがpandasなんかを使ったデータ分析用途の場合はオブジェクト指向は極力避けて関数とデータを意識的に分けたほうが可読性もメンテナンス性も高いよ SeriesやDataframeのようにデータとメソッドが不可分な独自の抽象データ構造をライブラリとして提供する場合にはオブジェクト指向を使ったほうがいい
875 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 14:35:51 ID:wjVEP1qN.net] Pythonはオブジェクト指向を学ぶのには向いてないよな
876 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 15:03:49.44 ID:Uatckw9k.net] >>860 その通りです 私はバッチ処理専門で開発していますが 関数すら極力書かないようにしています 関数を作ると処理の流れが行ったり来たりして読みづらいからです Cで言うとmain関数の中に全ての処理があるように書きます
877 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 15:17:02.34 ID:XZrd/bpX.net] >>863 関数の役割分担や命名をちゃんとしてないからでは? 関数はそれ自身で責任を追って実装・検証するもの 使う側は関数内部まで気にしなくても済むようにならないと意味ない なんで便宜上行ったり来たりは発生しない 外部ライブラリやビルトインの関数の実装までふつう追わないでしょ
878 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 16:40:05.60 ID:wcqGltd4.net] >関数すら極力書かないようにしています さすがにそれはアカン 考えを改めた方がいい
879 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 16:45:43.84 ID:WuQ7ClRo.net] 個別の関数をmain関数と同居させる場合、 関数の配置の順序とかあるの? JSで関数を最後にまとめたりしているものがあったけど、 Pythonじゃ見かけないような
880 名前:デフォルトの名無しさん [2022/04/30(土) 16:56:56.93 ID:IElPr3np.net] >>863 コボラーですね分かります。 合言葉はIDENTIFICATION DIVISION。
881 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 17:15:45.06 ID:XOEt5cKu.net] >>866 JSはスコープごとにスクリプトを2回読むイメージで実行されるので 関数や変数の宣言は巻き上げられて先頭で宣言されてるのと同じになる Pythonにはそういう機能はないので1ファイルならmainの実行は最後にするのが普通 def main(): hoge() def hoge(): print(‘hoge’) main()
882 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 17:16:15.33 ID:Uatckw9k.net] >>866 他の言語は知りませんが、Pythonは関数を呼ぶ処理より前に 関数定義がないといけないんですよ だから関数のあるスクリプトファイルを開くと、まず関数の羅列が ズラズラと目に入るわけでして、文書を上から下に読んでいくという 人間の自然な動作に合わないのです
883 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 17:39:11.77 ID:PWl3mLPj.net] コボラーってやっぱアタオカだな
884 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 18:04:44.96 ID:64v4nlhT.net] >>869 def main(): sukinakansuu() def sukinakansuu(): pass if __name__ == '__main__': main() みたいに書くよ
885 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 18:07:46.92 ID:OR8SZm5l.net] >>866 Python の def 文は「実行文」だから定義される関数を呼び出す前に実行しないといけないのでJSみたいにするとエラーになる ちなみに実行文だから if xxx: def foo: print('foo1') else: def foo: print('foo2') みたいにして実行時に関数の定義を変えることもできる
886 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 18:49:26 ID:oMuBjy8I.net] 実行文??
887 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 19:22:27.31 ID:XZrd/bpX.net] https://docs.python.org/ja/3/reference/compound_stmts.html#function-definitions 式じゃないし識別子でもない単にそこで実行される文
888 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 21:51:14.91 ID:yu/EzU82.net] >>872 それ「実行文だから」とか全然理由になってない インタプリタ型の言語ならJSでもRubyでもPHPでも全く同じことできる 実行文ではないC言語でも定義より先に呼び出したらエラーになる
889 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 22:12:01.94 ID:o6QgUZIK.net] >>872 ┏━━━━━━━━━━━━┓ ┃The image you are .┃ ┃requesting does not exist .┃ ┃or is no longer available. .┃ ┃ ┃ ┃imgur.com ┃ ┗━━━━━━━━━━━━┛
890 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 22:22:35.44 ID:64v4nlhT.net] seleniumでaタグをclickしてswitch_to.windows(driver.window_handles[1])しても<html><head></head><body></body></html>っていうページにアクセスするようになる なんで無内容に?どうすればいいんだろう そもそもGUI上はクリックしてないんだけどなんだこれ
891 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 22:23:14.79 ID:OR8SZm5l.net] >>875 > インタプリタ型の言語ならJSでもRubyでもPHPでも全く同じことできる やれるね、だから何? > 実行文ではないC言語でも定義より先に呼び出したらエラーになる コンパイル言語で定義より先に呼び出し? 実行順序とソース上の順序を混同してるだろw
892 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 22:59:55.25 ID:64v4nlhT.net] >>877 解決 クリックしたあと2秒sleepさせたら出来た 読み込みに時間が掛かるんだな
893 名前:デフォルトの名無しさん mailto:sage [2022/04/30(土) 23:11:39.76 ID:484odO/R.net] >>878 だから何じゃねーよww ダメだこいつw
894 名前:デフォルトの名無しさん [2022/05/01(日) 02:13:14.49 ID:b95w4aAB.net] >>875 C言語の場合、宣言すれば定義は後回しでOK。
895 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 05:53:28 ID:Rd1MW222.net] >>880 ダメなのはお前の頭だろw 他の言語なんて関係ないし
896 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 08:06:33.67 ID:JzdAzqq0.net] https://i.imgur.com/3qXlqVA.jpg
897 名前:デフォルトの名無しさん [2022/05/01(日) 09:40:22.97 ID:0ggTu6P0.net] 実行文って、コンパイル型言語で宣言文と区別する意味の用語だから、Pythonでは、完全にナンセンス 「実行文だから」は何の意味も持たない 実行文でない文は、逆にあるのか?
898 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 10:00:01.37 ID:aj8iUgGb.net] コンパイル言語? JSにも宣言文はあるんだが
899 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 10:06:43.73 ID:KjQtFKQ9.net] インタプリタだって全部の行を一行ずつ実行しながら解釈しているとは限らないんだから区別はあっておかしくない。
900 名前:デフォルトの名無しさん [2022/05/01(日) 10:39:20 ID:c1q3P+1N.net] 宣言っていまいち意味わからんのだけど。 defは今の名前空間に新たにオブジェクト(function/callable)を作成するって捉える方がしっくりする。 だから、名前()で呼び出しするためには、その前に作成が終わってなきゃダメよね、ってなる。 って考えると、Pythonは上から下に順番に実行しかしていない、ってわかる。
901 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 11:07:07.83 ID:IDzy7BiL.net] 関数定義をまとめた関数をスクリプト末尾に書いて それをスクリプト先頭で呼ぶようにすれば…と思ったけどダメですね ズラズラ並んだ関数定義を見たくない場合、定義部分を別スクリプトにして それをimportすればいいのかな?
902 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 11:28:22.49 ID:UqOJOPuh.net] 868のやり方じゃ駄目なんけ?main()の呼び出しを最後に書く以外は関数の並び順は自由だし、関数名がmainなら最初に実行されるだろうことは暗に容易に伝わる。 自分も呼び出すほうを上、呼び出されるほうを下に書くほうが読みやすいと感じるから常にそうしてるよ
903 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 11:54:47.68 ID:IDzy7BiL.net] >>889 自分はメイン処理をトップレベルに書く派なので 残念ながらこの手法は使えません しかし知識として知りたくはあります >>868 ってmain()より下にあるhoge()をmain()から呼べるってことですよね それは何故でしょうか
904 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 12:26:54.53 ID:Dd8WxxXv.net] >>890 > 868ってmain()より下にあるhoge()をmain()から呼べるってことですよね > それは何故でしょうか main()が(定義される時じゃなくて)実行される時はdef hoge()も実行済みだから
905 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 12:29:09.32 ID:UqOJOPuh.net] そのこだわりはよくわからんな… デメリットしか思いつかん
906 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 12:46:49.10 ID:JzdAzqq0.net] 相互参照している場合とかどうするんでしょうね?
907 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 12:52:31.00 ID:Yd4A+jrH.net] >>885 >>872 で「実行文だから実行時に関数定義をかえることができる」と書いてるのは嘘だったってことかな?
908 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 13:24:18.52 ID:Rd1MW222.net] >>893 実行までに各々定義すればいいだけだからなんの問題もないだろ
909 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 13:25:01.76 ID:Rd1MW222.net] >>894 Pythonの話とJSの話の区別もつかない無能乙
910 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 13:46:20.12 ID:qrKdrkjM.net] どうでもいい話になってきてるような スレタイにふさわしいと言えばそうだが
911 名前:デフォルトの名無しさん [2022/05/01(日) 14:07:59 ID:b95w4aAB.net] スレタイ通り下らない話で盛り上がってて実に素晴らしい。
912 名前:デフォルトの名無しさん [2022/05/01(日) 14:08:54 ID:QvrU5Mi0.net] エントリポイントのエの字も出ない
913 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 14:18:30 ID:Gwm1B3AE.net] >>891 実行というからおかしくなる 関数のシグニチャを評価するタイミングと 関数のボディを評価するタイミングの違い 前者が他言語でいう宣言文の役割 Cのプロトタイプ宣言とかと同じ Pythonでも宣言として捉えたほうが分かりやすいよ
914 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 14:20:32.48 ID:IDzy7BiL.net] >>891 うーんよくわかりません なぜ上にある関数から下にある関数を呼べるのか 私の脳はここまでです >>892 メリットが二つあります ・スクリプトの先頭から実行が始まるので流れを追いやすい ・メイン処理の字下げが一段少なく済む
915 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 14:40:33.88 ID:vJsN8meg.net] >>901 > 先頭から実行が始まる 先頭に書いてあるのがmain関数なら上から読み下せるのは同じじゃね?
916 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 14:53:14.40 ID:KjQtFKQ9.net] うちはスクリプトの末尾にこの2行、ってのが定番たわ。 if __name__ == '__main__': main()
917 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 15:06:46.08 ID:JzdAzqq0.net] >>895 https://i.imgur.com/1yUgMXq.jpg
918 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 15:10:06.70 ID:Rd1MW222.net] >>900 だからそんな思考回路だと if xxx: def foo: print('foo1') else: def foo: print('foo2') みたいなコード見たらなんで宣言2個あってもいいんだよ?ってなるだろ
919 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 15:11:46.01 ID:IDzy7BiL.net] >>902 main関数が処理の始まりかどうかは結局下を見ないと確定しないので… ならばトップレベルにメイン処理を書く方が安心確実と思う次第です [] [ここ壊れてます]
921 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 15:15:47.63 ID:4M5GqABF.net] def main(): hoge() def hoge(): print(‘hoge’) main() Pythonの評価順は基本的に上から下に一行ずつ 1行目ではdef main():までの関数シグニチャのみ評価してボディは評価されない(それがdefの役目) 2行目も同じようにdef hoge():までの関数シグニチャのみ評価 3行目の関数呼び出し時にmain関数のボディが評価される そのタイミングではhoge関数はシグニチャが評価され関数として宣言済みなのでhogeを呼び出せる
922 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 15:20:45.71 ID:Rd1MW222.net] >>901 Pythonインタープリターの気持ちになって考えればわかると思うよ 1: def main(): 2: hoge() 3: def hoge(): 4: print(‘hoge’) 5: main() 1を実行する時は2の内容をmainで登録する(この時点では2自体は実行されない) 3も同様に4の内容をhogeで登録する 5のmainの呼び出しで2が実行されて4が呼ばれるので実行順は1→3→5→2→4のようになる
923 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 15:22:24.87 ID:Rd1MW222.net] >>906 そう思うのは自由だけどPythonでは無理だから諦めるか他の言語にするしかない
924 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 15:22:30.22 ID:F/hLZDCn.net] >>905 宣言が2個あったところで何が問題なの? 2個あったらエラーにするルールのある言語もあるけどPythonにそんなルールない
925 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 15:30:33.22 ID:vJsN8meg.net] >>906 確かにそのとおりだけど、あんまり他人を疑いすぎると禿げちゃうよ
926 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 15:36:27.81 ID:M2LDeL9g.net] これからはクラス定義もクラスメソッドも関数もごちゃごちゃにして途中でjson入れたり意味なく連想配列作ったりいきなりタプルにしたり判読し辛いコード書くことに決めた 初心者が初心者になる前に躓いて読めなくなるようにしていこう
927 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 15:37:45.97 ID:M2LDeL9g.net] オーバーライドしまくってやる
928 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 15:38:22.08 ID:M2LDeL9g.net] 意味なく戻り値にクラスメソッド使ってやる
929 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 15:51:18.35 ID:Rd1MW222.net] >>910 エラーにしない言語って何?
930 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 15:55:09.23 ID:zrtkQxP2.net] javascriptは同じ名前の関数が並んでてもエラーにならないな。後ろが使われる
931 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 16:00:48.30 ID:DfY2Iokg.net] グローバル変数・定数の定義とか、 場合分けしてモジュール等をインポートするときとか、 これらをサブ関数の中か、その前にグローバルで書くべきかいつも悩むわ モジュール等のインポート グローバル変数・定数の定義 場合分けによるモジュール等のインポート(環境依存) サブ関数の定義 場合分けによるモジュール等のインポート(環境非依存) メイン関数の定義 メイン関数の実行(>>903 ) これ、問題ある?
932 名前:917 mailto:sage [2022/05/01(日) 16:03:56.84 ID:DfY2Iokg.net] グローバル変数・定数の定義なんかも サブ関数としてまとめて定義して、メイン関数で呼び出してグローバル宣言したほうがいいのかな?
933 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 16:08:44 ID:Rd1MW222.net] >>916 まあjavascriptはvarで同じ変数使ってもエラーにならないような言語だしね さすがに最近はletで重複させるとエラーになるみたいだけど
934 名前:デフォルトの名無しさん [2022/05/01(日) 16:30:44 ID:6txgexSj.net] 機能別にモジュール作って、関数詰め込んで使ってるんだが、合ってる?
935 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 18:30:38 ID:tQAUcym9.net] 一連の流れ見てもよくわからんのだけど、質問は何なの?
936 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 18:43:16 ID:CmrphzhC.net] 自分の思い通りにソース書きたいけど仕様上書けない、どうしたらいいのって愚痴
937 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 19:08:52 ID:tQAUcym9.net] もう質問じゃないよね。だったら区切ってもいいでしょ
938 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 19:09:28 ID:Jd2/Razo.net] わからないです
939 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 21:52:03.79 ID:haToe2zO.net] >>917 普通にモジュール分割していいなら メイン関数は定義せず__main__.pyのトップレベルに書く 定数は定数用のモジュールを用意してimport
940 名前:デフォルトの名無しさん [2022/05/01(日) 22:17:08.56 ID:b95w4aAB.net] 「オレは気に入らない」って人は生きるの辛そう。 柔軟性が無いと常に何かと戦うことになる。
941 名前:デフォルトの名無しさん mailto:sage [2022/05/01(日) 23:58:05.46 ID:Hq8ES+K0.net] こだわりなくてもいいとこなら別にそれでいいんじゃね こだわらなきゃいけない事なんていくらでもあるだろう
942 名前:デフォルトの名無しさん mailto:sage [2022/05/02(月) 00:19:51 ID:zZIONtog.net] ノットフォーミー全盛期だよな、現代
943 名前:デフォルトの名無しさん [2022/05/02(月) 13:04:57.99 ID:ZthOcqCz.net] とにかく在日は悪いことしかしない 在日は皆殺しにすべき!
944 名前:デフォルトの名無しさん mailto:sage [2022/05/02(月) 21:11:16.99 ID:FWJ3qdnv.net] 俺も最初の頃はこだわり持って色々なこと試してたけど結局シンプルイズベストだと気づいてさっさと書くようにしたら効率上がったなぁ まぁある程度新しいことにも挑戦するべきだけどさ でもセイウチ演算子の使い所がよく分からないよね
945 名前:デフォルトの名無しさん mailto:sage [2022/05/03(火) 06:15:08.74 ID:mgZ8H7hi.net] > でもセイウチ演算子の使い所がよく分からないよね C言語やってたら余裕 with open("sample.txt") as f: while text := f.readline(): print(text)
946 名前:デフォルトの名無しさん mailto:sage [2022/05/03(火) 06:20:24.93 ID:ZdlL7fiJ.net] それfor文より何がいいの? というかファイルのデータなくなったらエラーでないの? while文の終了条件がわからない
947 名前:デフォルトの名無しさん mailto:sage [2022/05/03(火) 06:51:18.93 ID:mgZ8H7hi.net] for 文で書いてみてよ
948 名前:デフォルトの名無しさん mailto:sage [2022/05/03(火) 07:44:11.89 ID:GYbp8Bpg.net] セイウチ演算子の使い所は、PEPのExapmlesを見れば分かるのでは https://peps.python.org/pep-0572/#examples
949 名前:デフォルトの名無しさん mailto:sage [2022/05/03(火) 10:25:34 ID:lrUYCsXU.net] >>933 for line in f: print(line) ファイルオブジェクトはiterableで行読み込みする てかふつうこう書かん? >>932 https://docs.python.org/ja/3/library/stdtypes.html#truth ファイル終端で空文字列(=偽)が返って終了
950 名前:デフォルトの名無しさん [2022/05/03(火) 16:37:55.33 ID:zAUrPbJb.net] 0.1*3==0.3がFalseになるのに、0.1*2==0.2がTrueになるのはなぜですか?
951 名前:デフォルトの名無しさん mailto:sage [2022/05/03(火) 16:54:49.32 ID:zAUrPbJb.net] 解決しました。忘れてください
952 名前:デフォルトの名無しさん mailto:sage [2022/05/03(火) 18:09:38.71 ID:5IHsdKXO.net] >>937 ちなみに何故です?
953 名前:デフォルトの名無しさん mailto:sage [2022/05/03(火) 19:47:01.45 ID:6X7U05Nz.net] 計算誤差でしょ
954 名前:デフォルトの名無しさん [2022/05/03(火) 20:19:38.25 ID:zAUrPbJb.net] >>938 二進数だから >>939 そうなんだけど、0.2はその誤差が何で出ないのかなってわかんなくて聞いたけど、書いてすぐわかっちゃった
955 名前:デフォルトの名無しさん mailto:sage [2022/05/03(火) 20:45:03.55 ID:tKI6TxwO.net] 知りたい~
956 名前:デフォルトの名無しさん mailto:sage [2022/05/03(火) 22:27:11.85 ID:lyrCvvNg.net] 案外やなヤツw
957 名前:デフォルトの名無しさん mailto:sage [2022/05/04(水) 05:25:28 ID:8abXDPny.net] ちんちんシュッ!シュッ!シュッ!
958 名前:デフォルトの名無しさん mailto:sage [2022/05/05(木) 10:24:51.52 ID:vEkkTSCd.net] (2^((2^(35-1))-1))*(2-(2^-4060)) の計算がしたいんだが、できないのでとりあえず 2^17179869183 の計算がしたいが、 多倍長電卓LMで一瞬で解答が得られる 2^2147483647 でさえも、 ttps://paiza.io/projects/RM8L_oSwcs5_ghDFro5Sew でも ttp://codepad.org/ZhAiGY69 でも ttps://ideone.com/TeJEDo でもタイムアウトして困っています。
959 名前:デフォルトの名無しさん mailto:sage [2022/05/05(木) 12:32:07.83 ID:Yq75WaGa.net] 日本語でOK
960 名前:デフォルトの名無しさん mailto:sage [2022/05/05(木) 12:38:36.07 ID:MYAXyIRK.net] 6億桁ぐらいか? そんなのprintしろって言われても困っちゃうよ
961 名前:デフォルトの名無しさん mailto:sage [2022/05/05(木) 16:24:10.63 ID:gVprMCyl.net] >>944 そんだけデカい桁扱いたいなら Decimal使いつつ、デフォルトの指数設定も弄らないとオーバフロー起こすぞ https://docs.python.org/ja/3/library/decimal.html コード例としてはこんな感じ https://ideone.com/exndwC (桁数6億ぐらいだから多分合ってると思う)
962 名前:デフォルトの名無しさん mailto:sage [2022/05/05(木) 17:06:58.83 ID:vEkkTSCd.net] >>947 どうもありがとう。 大変参考になります。
963 名前:デフォルトの名無しさん mailto:sage [2022/05/05(木) 17:20:45.83 ID:h3TBoBMl.net] decimal 使わずとも print しなけりゃ時間内に終わるよね?
964 名前:デフォルトの名無しさん mailto:sage [2022/05/05(木) 17:22:51.83 ID:h3TBoBMl.net] https://ideone.com/xXhkPf
965 名前:デフォルトの名無しさん mailto:sage [2022/05/05(木) 17:37:43.73 ID:vEkkTSCd.net] 有効桁数100桁で2^17179869183の計算ができました。 https://ideone.com/dqhOTo どうもありがとう。
966 名前:デフォルトの名無しさん mailto:sage [2022/05/05(木) 18:05:45.24 ID:vEkkTSCd.net] >>949-950 カレットが使えないんじゃないかな? 計算結果が違っている。 ttps://ideone.com/SNjYuo **で置き換えてみたがランタイムエラーになる。 ttps://ideone.com/F2N5yS ttps://ideone.com/WUSd0H
967 名前:デフォルトの名無しさん mailto:sage [2022/05/05(木) 19:04:52.15 ID:h3TBoBMl.net] 元の式をコピペして動いたと思っちゃった。 確かに ** にしないと計算結果違っちゃうね。 python の int は多倍長計算してくれると思ってたけど 上限あったのね。勉強になったです。
968 名前:デフォルトの名無しさん mailto:sage [2022/05/05(木) 20:44:57.60 ID:SUkJat8/.net] >>940 これ教えてください
969 名前:デフォルトの名無しさん mailto:sage [2022/05/05(木) 20:54:23.21 ID:Rtfrs1Kx.net] >>954 二進数 誤差 でググりもしてないならこの分野向いてない
970 名前:デフォルトの名無しさん mailto:sage [2022/05/05(木) 20:58:06.37 ID:SUkJat8/.net] >>955 なんで0.2も0.3も二進数で表現できないのに0.2は誤差がでないんですか?
971 名前:デフォルトの名無しさん mailto:sage [2022/05/05(木) 21:20:06.74 ID:Rtfrs1Kx.net] >>956 答えとしてはたまたまでPythonの浮動小数点の実装方針 >>> [(x, 1e-1 / 10 ** x) for x in range(10)] これでイメージつくかも
972 名前:デフォルトの名無しさん mailto:sage [2022/05/05(木) 21:33:08.66 ID:/WvxkOMY.net] 仮数部が等しいから当然
973 名前:デフォルトの名無しさん mailto:sage [2022/05/05(木) 21:51:52.77 ID:tw5Ro1fM.net] 0.2 に誤差がでないのではなく、 誤差付き 0.1 を2倍した結果が、誤差付き 0.2 と等しくなる、 というだけ 0.1, 0.2 を二進数にすると、それぞれ以下の無限小数になる 0.00011001100.. 0.0011001100.. これらを正規化すると、以下のようになる 1.1001100.. x 2^-4 1.1001100.. x 2^-3 つまり、仮数部が同じで指数部が 1 だけ異なる float の仮数部の桁数は小数点以下 52 桁なので、 53 桁目で丸められて誤差が入るが、 元の仮数部が同じなので、丸められた結果の仮数部も同じ
974 名前:デフォルトの名無しさん [2022/05/05(木) 22:29:18.63 ID:VIM8YOLC.net] 優しみがゴイスー
975 名前:デフォルトの名無しさん mailto:sage [2022/05/06(金) 01:20:26.74 ID:wPj9y4p8.net] 2進数の11 は、3 だけど、 110なら6、1100なら12 指数部の指定で、桁がずれるだけで、仮数部は同じ。 仮数部は2桁で、11とする 10進数の11 は、11だけど、 110なら110、1100なら1100 これも指数部の指定で、桁がずれるだけで、仮数部は同じ。 仮数部は2桁で、11とする
976 名前:デフォルトの名無しさん mailto:sage [2022/05/07(土) 13:14:50.97 ID:2qmSGQfh.net] プロジェクトのパッケージ構成で質問 https://packaging.python.org/en/latest/tutorials/packaging-projects/#packaging-python-projects 上記内の例で__init__.py、example.pyが存在するのはsrc直下ではなくて、その中にあるexample_package内であってますか?
977 名前:デフォルトの名無しさん mailto:sage [2022/05/07(土) 22:17:49.52 ID:hLdUgsLX.net] >>947 で教えて頂いた https://ideone.com のdecimalのemaxって最大9を何個まで指定可能か知ってますか? とりあえず801個まではテストしてみて動きましたが。
978 名前:デフォルトの名無しさん mailto:sage [2022/05/08(日) 07:16:57 ID:rAxhmZ4o.net] decimal.MAX_EMAXに書いてある
979 名前:デフォルトの名無しさん mailto:sage [2022/05/08(日) 08:22:04 ID:vKAQqA9f.net] >>964 どうやったらそれを画面出力できるの? print(decimal.MAX_EMAX) NameError: global name 'decimal' is not defined print(MAX_EMAX) NameError: global name 'MAX_EMAX' is not defined
980 名前:デフォルトの名無しさん mailto:sage [2022/05/08(日) 09:10:53.78 ID:lPzTyKes.net] リファレンスの読み方の勉強からはじめたら?
981 名前:デフォルトの名無しさん mailto:sage [2022/05/08(日) 09:12:41.48 ID:8ykKyj07.net] __  ̄ ̄ ̄二二ニ=- '''''""" ̄ ̄ -=ニニニニ=- /⌒ヽ _,,-''" _ ,(^ω^ ) ,-''"; ;, / ,_O_,,-''"'; ', :' ;; ;,' (.゙ー'''", ;,; ' ; ;; ': ,' _,,-','", ;: ' ; :, ': ,: :' ┼ヽ -|r‐、. レ | _,,-','", ;: ' ; :, ': ,: :' d⌒) ./| _ノ __ノ
982 名前:デフォルトの名無しさん mailto:sage [2022/05/08(日) 09:23:18.61 ID:abjrWq6f.net] あのさぁ、俺はお前らを「道具」として見てンだわw 俺が聞いたらお前らは素直に答える。これだけでいいのw decimal.MAX_EMAXの出力方法教えろやおらぁwwwwwwwwwwwwwww
983 名前:デフォルトの名無しさん mailto:sage [2022/05/08(日) 09:26:59.55 ID:gMjR/OFO.net] https://docs.python.org/ja/3/library/decimal.html#constants
984 名前:デフォルトの名無しさん mailto:sage [2022/05/08(日) 09:29:39.59 ID:3lpfIXfe.net] NameError: global name 'decimal' is not defined これを解決すればいいんじゃない?
985 名前:デフォルトの名無しさん mailto:sage [2022/05/08(日) 09:30:11.41 ID:rWXY/EV0.net] >>965 まずdecimal.MAX_EMAXの値はリファレンスに乗ってる https://docs.python.org/ja/3/library/decimal.html の定数って所 で、コードで確認する例もおいておく https://ideone.com/gt9i0u
986 名前:デフォルトの名無しさん mailto:sage [2022/05/08(日) 09:34:38.39 ID:vKAQqA9f.net] >>969 書いた通りリンク先に書いてある(18個)以上の9の数を設定できちゃうんだけど、 9の数が999999999999999999個ってことなの? でも1601個設定して10^10^1600を計算したらエラーになったぞ。
987 名前:デフォルトの名無しさん mailto:sage [2022/05/08(日) 10:09:59.71 ID:vKAQqA9f.net] ごめんなさい。1600個いけました。9の個数が足りてませんでした。 9の数が999999999999999999個まで行けそうですね。 すみません。
988 名前:デフォルトの名無しさん mailto:sage [2022/05/08(日) 10:20:28.56 ID:vKAQqA9f.net] ctx.Emax = 10 ** 100000 # 指数上限を増やす とかできるね。
989 名前:デフォルトの名無しさん mailto:sage [2022/05/08(日) 10:33:25.17 ID:vKAQqA9f.net] 処理時間と表示桁数の関係であまり大きいとエラーになるけれども 10^10^2000 https://ideone.com/hjMW7h このくらいまではいけますね。
990 名前:デフォルトの名無しさん mailto:sage [2022/05/08(日) 10:50:23.38 ID:vKAQqA9f.net] 10^10^100000 https://ideone.com/PIILdo ctx.Emax = 10 ** 10 ** 5 これを ctx.Emax = 10 ** 10 ** 6 にすると5秒ではタイムオーバーする。 なので上記が限界かな? 10^10^100001(エラー) https://ideone.com/Og9zW4
991 名前:デフォルトの名無しさん mailto:sage [2022/05/09(月) 22:59:02.46 ID:afn9JDvJ.net] >>847 どんな感じ?
992 名前:デフォルトの名無しさん [2022/05/13(金) 02:25:52.93 ID:LdGyp25/.net] class sub(tk.Toplevel): __WIN: tk.Toplevel|None = None __def __init__(self, root): ____if win:= self.__class__.WIN: _______win.focus_set() _______return ____super().__init__(root, name='sub') ____self.protocol('WM_DELETE_WINDOW', self.onExit) __def __onExit(self): ____self.__class__.WIN = None ____self.destroy() rootにサブ画面呼び出しボタンがある. 以下のような感じ btn['command'] = onShow def onShow(self): __sub(self.root) サブ画面はシングルトンにしたい.あればハイライトする,なければ画面生成 で上記の感じで書いて,問題なく動いてはいるんだけど tkinterのtoplevelのシングルトン表現ってこれでいいんだっけ? __new__に仕込むんだったかな ボタン押すたびに無駄なインスタンス生じてる気がするんだけど,GCあるし問題ない?
993 名前:デフォルトの名無しさん mailto:sage [2022/05/16(月) 01:37:06.47 ID:n1VwRTHA.net] Pycharmについての質問なんですが コードを書いてる途中に出てくる self:Canvas,からはじまる吹き出しを消したいのですが どこかの設定なのかプラグインなのかわからなくて困っています よろしくお願いします
994 名前:デフォルトの名無しさん mailto:sage [2022/05/17(火) 21:46:26.19 ID:BQcMDz1x.net] pandasでgroupbyにGrouperつかってas_index=Falseにすると Grouperで使用した日付がどこかいっちゃうんですけど仕様なんですか? df.groupby(pd.Grouper(key="Date", freq="MS"), as_index=False)[["hoge"]].sum() as_Index=Falseからreset_indexで代わりはいけるのですがなんとも…
995 名前:デフォルトの名無しさん mailto:sage [2022/05/17(火) 21:48:07.41 ID:BQcMDz1x.net] >>980 最後の行間違ってました as_Index=Trueからreset_index
996 名前:デフォルトの名無しさん [2022/05/20(金) 10:26:37.96 ID:gFWhc+m8.net] >>978 厳密にやりたいなら、metaclass使う方法なんだけど、 すごくデカイものじゃなかったら、起動時に1回切りで作ってしまうのもありだし、 lazyにしたければ、呼び出し時にインスタンスがNoneかどうか判定する処理を挟むだけ。 どっちも簡易的なシングルトンになる。 そもそも、GCさせないのがシングルトンの目的でしょ? 一般論として、シングルトンはデメリットも大きいことは理解しておく必要がある。 たとえば、画面とデータの同期を常に意識しないといけないとか、その関係でリークの原因になりやすいとか。 そういうのが面倒であれば、シングルトンをやめて画面を再作成する方がいい。
997 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 18:02:35.80 ID:/hGmbW/Z.net] FlaskでWebアプリケーション作ってHerokuに上げる練習しているのですが Herokuにデプロイした時、requirements.txtの内容のパッケージをインストールしてるみたいですけど autopep8とかもインストールしてるのにさっき気がつきました こういう、開発するときは使うけど本番では使わないパッケージってのはどう管理するものなのでしょう? パッケージはpipでインストールして、pip freeze > requirements.txt しました 気にしなくてもいいんでしょうか
998 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 19:12:30.17 ID:KFSuZxfk.net] >>983 pip標準だけだとdev dependencyを指定する方法はないと思うよ HerokuはPipenvのPipfile.lockにも対応してるので Pipfile使って[dev-packages]で指定すれば?
999 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 22:21:22.65 ID:/hGmbW/Z.net] >>984 ありがとうございます やっぱりフォーマッタとかがHerokuにインストールされちゃうのはちょっと嫌なので Pipenv調べてみます スレ立て挑戦してみます
1000 名前:デフォルトの名無しさん mailto:sage [2022/05/22(日) 22:28:24.41 ID:/hGmbW/Z.net] 立てました。 【まず1嫁】くだすれPython(超初心者用) その57 mevius.5ch.net/test/read.cgi/tech/1653225908/
1001 名前:デフォルトの名無しさん [2022/05/24(火) 16:41:49.28 ID:IF15Gljx.net] ファイル読み込みでawkで言う'/hoge/,/fuga/{ print }'みたいに特定の文字列を含む行から特定の文字列を含む行のみを表示するにはどうすれば良いですか? hogeがマッチしたら出力フラグ立てて、fugaがマッチしたらフラグ消すとかみたいなの以外でお願いします
1002 名前:デフォルトの名無しさん mailto:sage [2022/05/24(火) 17:09:56.59 ID:78F716Pq.net] >>987 正規表現使うか行単位のイテレータを使うか
1003 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 10:54:30 ID:LbC2GlL6.net] インターネット接続が制限されたWindows上でPythonを利用したくなり、 NumPyやpandas等、必要だったパッケージが同梱されていたこともあり、 WinPythonを利用しています 同じようなことを、同様な環境のLinux(Alma Linux 8)で利用したいと思っており、 Anacondaを利用してみましたが、Windowsと同じように使いたく思ってます Linux向けのPythonディストリビューションで、pip系で運用できるものは 何かありますでしょうか
1004 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 11:20:04.09 ID:4ToCs4sv.net] >>989 公式からソースとってきてビルドするだけでpipは使える Linuxが古すぎると必須ライブラリも自前でビルドする必要はあるだろうけど
1005 名前:デフォルトの名無しさん mailto:sage [2022/05/30(月) 11:36:49.09 ID:LbC2GlL6.net] >>990 なるほど 自前ビルドならpipも使えますね 自前ビルドして、使うパッケージをpipで導入する、という作業をするものとして、 WinPythonのように、既に各種のパッケージが導入された、 Linux向けのPython環境というものがあれば紹介いただけますでしょうか
1006 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 06:33:05 ID:Re2gLZE7.net] イテレータとイテラブルの項読んでると頭おかしくなるわ 要は「反復可能なオブジェクト」と「反復不可能なオブジェクト」があって 反復可能に設定されてるオブジェクトはnext()とかが使えて 「反復不可能なオブジェクト」はnext()とかは使えないけど for ... in ,,, にこのオブジェクトをいれると 内部ではiter()の中にぶちこまれてるから反復動作をするようになる つまり「反復不可能なオブジェクト」でもiter()に入れれば良いんだが 実は「反復不可能なオブジェクト」にはiter()を使えないものもある iter()が使えるものをイテラブル、と分類している [オブジェクト] ├[イテレータ] next()などOK │ └[イテラブル] iter() OK │ └[not イテレータ]next()などNG ├[イテラブル] iter() OK → next()などOK └[not イテラブル] iter() NG ということ?
1007 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 07:59:09.30 ID:6BOKaYJy.net] イテレータは自身を返すiter()を実装しなければならないので、 イテレータはすべてイテラブルでもある for ... in ,,, は、iter()の結果に対してnext()を複数回呼び出すので、 イテレータでもイテラブルでも動作する [オブジェクト] ├[イテラブル] iter() OK │ ├[イテレータ] next() OK │ └[not イテレータ] next() NG │ └[not イテラブル] iter()もnext()もNG
1008 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 11:22:58.61 ID:3ilbGXWX.net] ミュータブルかイミュータブルかイテラブルかシーケンスかそれぞれの型にどの役割を当てられるかの感覚もつといいよ
1009 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 12:31:24.08 ID:Re2gLZE7.net] >>993-994 ありがとう ちょっとよく解んなくなってたわ 何度も学べば慣れるかな
1010 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 13:02:02.70 ID:G7XbJ25h.net] >>995 その辺り分類を掘り下げんでも良いのではなかろか イテラブルはiter()が使える反復可能オブジェクト イテレータはそれで返される物くらいのニュアンス ではイテレータ(型)とは何かって、next()など統一的な方法で 文字列でもリストでも辞書でもファイルでも各要素を反復するため 抽象化されたインターフェイス、主に対象への参照と現在位置を保持する
1011 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 14:19:59.15 ID:ercqZUlb.net] 公式リファレンスは正確性は高いが分かりやすさはお世辞にも高いとは言えないので 公式で分かりにくいと感じたらもう少し分かりやすく書いてる自分に合った補完サイトも読んだ方がいい
1012 名前:デフォルトの名無しさん mailto:sage [2022/06/04(土) 17:37:58 ID:3ilbGXWX.net] >>995 必ず慣れる でもその前に情報を整理する方が大切かもしれない
1013 名前:デフォルトの名無しさん mailto:sage [2022/06/05(日) 08:30:29.68 ID:BQs+AO7P.net] python iterable sequentialとかで画像検索すれば分かりやすいベン図みたいなのが出てくるよ
1014 名前:デフォルトの名無しさん [2022/06/05(日) 08:48:37.88 ID:Sg+yaBaV.net] 56埋まるまえに57に書いちゃったよお
1015 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 160日 7時間 10分 28秒
1016 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています