Pythonのお勉強 Part69

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ c733-stRS)
垢版 |
2022/11/24(木) 21:39:44.67ID:A6xfpKBe0
!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/

●関連スレ● 自称初心者は↓へ
【まず1嫁】くだすれPython(超初心者用) その58
https://mevius.5ch.net/test/read.cgi/tech/1662514433/

〇前スレ〇
Pythonのお勉強 Part68
https://mevius.5ch.net/test/read.cgi/tech/1663235546/

次スレの建立は>>985が挑戦する。(980通過して24h後も落ちなくなった)
### END of TEMPLATE ### ?
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
2022/12/20(火) 11:27:16.56ID:y4iYu1GO
>>212
普通はそういう風に引数増やすかクラス化したりしますよね・・?
でもそれは単に自分にバイアスかかってるだけなのかな、と思いまして。
もしくはglobalに何か使いどころでもあるのかなと。
コールバック関数だとlambda: callback(A)みたいな書き方を避けるため?みたいな
2022/12/20(火) 11:31:55.35ID:Vq1NdAbT0
規模とか目的によるんだろうな
ずっと保守するコードならきちっと書いた方が後々楽だし、
ささっと書いて終わりならglabalの方が早い
2022/12/20(火) 11:40:48.36ID:JRmAGSz50
名前空間あるしクラスのクラス変数、インスタンス変数と
立場というか複雑さはいっしょでない?
2022/12/20(火) 11:55:10.77ID:y4iYu1GO
>>214-215
なるほど、とりあえずは使い分けしていきたいと思います
ありがとうございました
217デフォルトの名無しさん (ブーイモ MMbf-LnhB)
垢版 |
2022/12/20(火) 12:19:36.88ID:3gHXSqyCM
スコープ外じゃない
global必要ない

A=10
def add(n): A+=n
def view(): print(A)
2022/12/20(火) 12:21:39.69ID:k+1oqZ2P0
>>213
log みたいに本筋に関係無いけどそこらじゅうで必要なものは global にした方が見通しがよくなる
あと設定ファイルから読み込んだ設定値等のように基本的に読み取りのみで変更しない物とかなら許容範囲
それ以外に global 使うことはあまりないな、俺は
2022/12/20(火) 12:29:38.27ID:XnPYkEMS0
書き換える場合はglobalが必要で、読み込む場合は必要ないって仕様だったはず
2022/12/20(火) 13:17:15.20ID:PtdONB4WM
>>218
僕の考えと全く同じ。完全に同意だわ
221デフォルトの名無しさん (アウアウウー Sa9f-03kJ)
垢版 |
2022/12/20(火) 13:20:20.57ID:d0az3cXAa
>>219
てきとーなこと言うな
https://www.youtube.com/watch?v=NuWFgnRZhlA
2022/12/20(火) 13:25:04.13ID:XnPYkEMS0
>>221
ん?実際使ってそうだったから言ってるんだけど
バージョンによって仕様が違うのかな
ちな、3.7使ってる
223デフォルトの名無しさん (ブーイモ MMd6-F7tP)
垢版 |
2022/12/20(火) 13:55:06.97ID:2l59gNAZM
30代Pythonクソチョン男は強姦魔の犯罪者!
気をつけましょう!
あなたの近くにいます!
224デフォルトの名無しさん (ワッチョイ f32c-XlG+)
垢版 |
2022/12/20(火) 14:16:44.71ID:3CIih5oL0
>>222
合ってるよ
しかしglobalやnonlocalは(設計)負け犬の烙印
2022/12/20(火) 14:47:49.90ID:Vq1NdAbT0
main()を呼ぶ前に設定を読み込んで、全部大文字の定数みたいな変数に入れて参照させる
たまに書き換えたくなる
2022/12/20(火) 15:28:58.59ID:JRmAGSz50
設定系は直接操作するんじゃなくて薄いインターフェイスかました方が
環境で分けたりモックも容易になるからそうしてる
227デフォルトの名無しさん (ワッチョイ 4b97-jBQ6)
垢版 |
2022/12/20(火) 15:49:32.75ID:TXqlHGSa0
システムに一つしかないものを取り扱うハンドラみたいなのはglobalにするのが設計的にもおかしくない気がするけど
一概に負けとか言えないと思うけどなー
2022/12/20(火) 16:03:10.85ID:bLZdNL8i0
原理主義はどこにでも存在するからな
229デフォルトの名無しさん (ワッチョイ f32c-XlG+)
垢版 |
2022/12/20(火) 16:16:10.63ID:3CIih5oL0
globalの唯一まともな使い道はキルフラグみたいに定義は関数外に書く必要がある、その関数専用の変数 みたいなやつ
ああ外部コントロールあるんだな とglobal, nonlocal宣言部で読める
それ以外ではスコープ外の変数は明示的に引数に渡すべきであって云々。逆にシグナル引数で渡すのは気持ち悪いし
2022/12/20(火) 16:22:03.00ID:oBUmZgg40
グローバルは、C,B,BCPL,ALGOL以来の伝統的な概念で
変数に限らず外部モジュールをリンクするのにも必要だ
それらを踏まえたで、やたらと使うのはやめとこう、くらいの話か?
2022/12/20(火) 16:26:08.70ID:Vq1NdAbT0
組み込み系は今でもC言語で、膨大なglobal変数の塊で動いている
当然干渉は発生しまくってそれは人間業ではコントロールできないので、
解析ツールでやばそうな箇所をリストアップして人間がじっくり調べる方法で今も作っている
232デフォルトの名無しさん (ワッチョイ 9761-XlG+)
垢版 |
2022/12/20(火) 17:01:28.69ID:ni2L+av30
>>230
初心者がglobalやnonlocal手を出すときはまず構造が間違っとるって話でしょ
eval, execも同じ。 慣れてるやつが意図的に使うなら好きにしたらいいじゃんョ
2022/12/20(火) 17:44:04.58ID:GaxDEwu0a
変数宣言がないpythonでグローバル変数など狂気の沙汰
マジで辞めとけ
2022/12/20(火) 17:53:56.68ID:paaoChG1d
グローバル変数に関してはPython は変数宣言あるぞ
2022/12/20(火) 18:53:45.23ID:k+1oqZ2P0
>>230
グローバルはその話で合ってる
問題はPythonは読出しだとグローバルで書き込みだとローカルになると言う一瞬?ってなる仕様だと言う事
まあよくよく考えたらそれなりにリーズナブルな仕様だとは思う
2022/12/20(火) 19:28:23.44ID:XnPYkEMS0
グローバル変数用のモジュールを用意すれば全て解決
2022/12/20(火) 19:31:19.26ID:GaxDEwu0a
大人しく引数で渡せって
2022/12/20(火) 19:32:53.36ID:KsWI+ERLa
キーワードとしてのglobalと、使い方としてグローバルの話が混ざってるなぁ
モジュールに変数設定して実質的にグローバル変数として使えるので、普通に使っていてキーワードとしてのglobalの使用は不要と言っても言い過ぎではないだろう

組み込みがグローバルだらけになるのは、ハードウェアが変数の値を勝手に書き換えることがあり、それを前提とした処理を書くため
結果的に組み込みプログラマーはグローバルが不要なところでもグローバルで書くのが慣習となってしまった
これは直すべき悪習だが、ハードウェア開発とソフトウェア開発はスキルセットが違うので、両方をカバーできる人はほとんどいないのが現実
239デフォルトの名無しさん (ワッチョイ 4b97-jBQ6)
垢版 |
2022/12/20(火) 20:25:35.35ID:TXqlHGSa0
>>238
そうなんだよなあ。組み込み屋と純粋ソフト屋は職能違うからね。
純粋ソフト屋が時間をかけて綺麗なコードを書く努力をしている間に、組み込み屋は別のことやってるからね。データシート通りに書き込んでるのに動かないけど、結局データシートが間違ってる、みたいな検証とか、波形見て波形が正しく出てない、みたいな検証とか。
純粋ソフト屋が組み込みのプログラムが汚いって馬鹿にするのはなんか違うと思うんだよね。
2022/12/20(火) 20:38:06.37ID:is7jIq/00
組み込みのプロセッサは遅いんだよ
ROMもRAMも少なくて、きちきちに詰めてる
そんな条件で競争に勝つには、新しい手法なんか使ってられない

要はCPUパワーがあれば人間が楽できるという話なので、楽せずに安く作る
2022/12/20(火) 21:30:58.08ID:6VqZ94+90
>>236
それ名前の衝突問題しか解決しないよね…
242デフォルトの名無しさん (ワッチョイ eaad-F7tP)
垢版 |
2022/12/20(火) 21:33:33.15ID:z0lLMPAj0
30代Pythonクソチョン男は強姦魔の犯罪者!
あなたの近くにいます!
父母と祖父母の戸籍謄本を提出させましょう!
243デフォルトの名無しさん (ワッチョイ f32c-ZR1D)
垢版 |
2022/12/20(火) 22:21:22.22ID:3CIih5oL0
chatGPTにfactory methodわかんねーからどういう感じなのか教えてくれやって聞いた
ロボ「こういう感じやで猿野郎」
ぼく「ほげ」

class Product:
__def operation(self):
____pass

class ConcreteProduct(Product):
__def operation(self):
____print("eat your banana !")

class Creator:
__def factory_method(self):
____return Product()

class ConcreteCreator(Creator):
__def factory_method(self):
____return ConcreteProduct()

def main():
__concrete_creator = ConcreteCreator()
__product = concrete_creator.factory_method()
__product.operation()

if __name__ == "__main__":
__main()
2022/12/20(火) 22:25:24.04ID:2TJ1ocPA0
純粋ソフト屋さんにVerilogとか書かせたら発狂しそうw
2022/12/21(水) 10:58:23.40ID:61VlK0r/d
組み込みソフト屋のソフトが汚いのは、ハードのテスト用にチョチョっと書いたのをそのまま使うから。ソースは俺
2022/12/21(水) 11:01:33.58ID:LOXcnIHB0
たまにお客を呼ぶようにすると、部屋を片付けるようになる
2022/12/21(水) 12:43:02.37ID:fQLbrXbN0
>>245
その理屈で機械学習屋やデータサイエンティストのコードも汚い、というかプロダクションレベルではないことが多いわな
2022/12/21(水) 13:10:09.14ID:uJxDCyvm0
自分でケツ拭くなら別にいいよ
その点、機械学習屋やデータサイエンティストはだいたい責任取らずに逃げるからタチが悪い
組み込み屋はいかにクソでも最低限のプロ意識と責任感はある奴が多い
2022/12/21(水) 13:17:21.01ID:M5sZwq5J0
機械学習屋のコードが1番きついわ
他の分野はまだ歴史があるからそれなりにコードは綺麗に書くという文化が浸透しているけど
機械学習の分野についてはバッチジョブだし
面倒なコードはフレームワーク側が持ってるから
ユーザーがグチャグチャのコードを書きがち
2022/12/21(水) 13:48:59.56ID:RDg+NYLG0
サンプルがおかしい
世の中のソフトの大半はwebか金融だろ
2022/12/21(水) 13:50:28.08ID:yiozSUofM
どうせ使い回さないのに綺麗に書く意味
2022/12/21(水) 13:55:34.79ID:KT7+MN136
機械学習はもうyamlでやる時代
253デフォルトの名無しさん (ワッチョイ 4b97-jBQ6)
垢版 |
2022/12/21(水) 23:00:50.73ID:dTgA3nGq0
>>245
ハードのテストが一番大事だもんね、仕様通りになってるかはソフト書かないとわかんないし
>>247
機械学習屋はともかくデータサイエンティストはサイエンティストだからプロダクションレベルを要求しても仕方ないと思うな
Jupyterでrestart and run all cellで動くだけマシといえよう
職能が違うのよ。普通のプロダクションコードのソフトメインで組み込みとデータサイエンスちょっとやったことある自分はそう思う。
どこに時間かけてるかが違う。憎み合うのは非生産的なのでやめましょう、相互理解しましょうって思っちゃう。
2022/12/22(木) 04:33:23.99ID:NfOs0lsnM
Web屋は仕様書を書くという習慣がないから
データサイエンティストなどという詐欺師と同じw
2022/12/22(木) 08:44:45.20ID:YRfbWBEUM
Pythonに出会って、自分がC言語に挫折した理由がやっとわかった
俺らがPythonで空気のように使っているリスト・タプル・辞書
これらがCにはないので、処理ロジックを書く前にまず
これらに相当するデータ構造を配列・ポインタを駆使して実現しなくてはならない
多くのC入門者はここで挫折してしまう
C言語に20年挑んでハローワールドから一歩も進めなかった男の悔恨
2022/12/22(木) 09:18:43.62ID:dL3lthyL0
リスト、タプル、辞書程度を実装できないレベルならどっちにしろどこかで挫折してただろ...
2022/12/22(木) 09:31:03.41ID:LbQSD5ER0
辞書はどうやって作ったらいいか未だに判らない
awkの連想配列が魔法に見えた
2022/12/22(木) 09:41:13.34ID:hTl9WjWG0
>>256
そこで挫折するって言ってるのに、その先のどっかで挫折するってなんか意味あるコメントなのか?

>>255 の言いたいことは分かる気がする
python知れてよかったな
2022/12/22(木) 09:44:49.77ID:LbQSD5ER0
みんなが同じようなことをやるなら誰が代表してやればいい

言語に仕様として持たせたり、関数をライブラリにしたり、モジュールを作ったり、
サンプルプログラムを流用したり
AIに書いて貰ったり ←今ここ
2022/12/22(木) 10:34:47.44ID:dL3lthyL0
>>258
Cに挫折した理由が
> リスト・タプル・辞書これらがCにはない
じゃないってこと
てかこの程度の文章も理解出来ないとかヤバくね?
2022/12/22(木) 10:38:02.07ID:O2u0DCiFd
Pythonに慣れるとCでcsvファイル読み込むだけでも面倒臭く感じるな
2022/12/22(木) 10:44:11.72ID:jksouGkc0
>>260
2022/12/22(木) 10:49:10.26ID:hTl9WjWG0
>>260
挫折した理由は下が出来なかったからだぞ?

> これらに相当するデータ構造を配列・ポインタを駆使して実現しなくてはならない

これが実現できなきゃ先にどうやって進むんだ?
2022/12/22(木) 10:55:23.14ID:N0yJkasM0
構造体の配列でいいのでは
2022/12/22(木) 11:01:24.77ID:smn+2blz0
オートマにばかり乗ってると、マニュアル車の運転が出来なくなる
2022/12/22(木) 11:06:25.86ID:LbQSD5ER0
結局は言語ではなくて、データ構造とアルゴリズムの理解なんだよな
昔はみんなが知ってるべき知識だったけど、どんどん知らなくても使えるようになってきた
2022/12/22(木) 11:06:39.49ID:jksouGkc0
>>264
タプルならね
リストだとデータをメタにする必要あるし
辞書はツリーやハッシュマップも必要で
共通して動的なメモリ管理がつきまとう
2022/12/22(木) 11:11:21.58ID:dL3lthyL0
>>263
そんなのググれば実装例あるからまずはそのまま使えばいいだろ
そんな知恵もないレベルならそりゃそこで挫折するわなw
2022/12/22(木) 11:13:23.55ID:smn+2blz0
頭は筋肉と同じで、使わないと退化する
270デフォルトの名無しさん (ブーイモ MMe6-F7tP)
垢版 |
2022/12/22(木) 11:24:11.50ID:mRMrFGRVM
30代Pythonクソチョン男は強姦魔の犯罪者!
あなたの近くにいます!
父母と祖父母の戸籍謄本を提出させましょう!
2022/12/22(木) 11:27:48.27ID:fdccbL2R0
>>268
なんかかわいそうな人 バイバイ
2022/12/22(木) 12:08:33.90ID:smn+2blz0
知恵のないプログラマって、使い物にならないが
いるんだな、そういうのが
2022/12/22(木) 12:10:33.74ID:dL3lthyL0
>>271
そんなレスしか出来ないなら黙ってなよ...
そっちのほうがかわいそうすぎるわw
2022/12/22(木) 12:23:21.69ID:eLm5edyfd
挫折した理由がわからないからなのか車輪の再発明に嫌気がさしたからなのかで違う
2022/12/22(木) 12:25:09.82ID:smn+2blz0
適性がないと思う
2022/12/22(木) 12:29:33.73ID:Z8BCtWeu0
マウントおじさんは今日も元気だなぁ
2022/12/22(木) 18:06:39.79ID:mFK9O5hM0
>>261
学生の時、CとJava覚えて
Cで基本情報処理取ったけど
Python知ってから、家でPythonしか使ってないけど
一般的なプログラマーじゃないから会社でそういう言語を使うことはないけども
資料の自動化云々、家のラズパイ、仮想通貨関係とか
Pythonしか使ってない
2022/12/22(木) 18:20:13.15ID:indjkH6A0
けど
けど
けども
使ってない
2022/12/22(木) 18:47:57.98ID:mFK9O5hM0
>>278
やめろ!5chだぞ
お前、絶対面白くない奴だろう
君が求める完成形の文章は絶対に面白くない
2022/12/22(木) 19:03:24.41ID:dbqZG8bb0
簡単に書けるレベルのものしかやったことないけど、プログラマとしての欲求が満たせて自分は満足している
簡単なものしか書けないレベルっていうのが本質的なんだろう
2022/12/22(木) 19:07:06.14ID:smn+2blz0
人の揚げ足取りが一番つまらない奴
2022/12/22(木) 19:09:04.98ID:smn+2blz0
普通は簡単に書けるレベルをやるので十分なんだよ
自分がやってることをできるだけ手間掛けないで済むようにすることから始める

簡単に書けないことは、それで飯を食おうと思ったときにやれば良い
2022/12/22(木) 19:19:51.34ID:gXKKQs6i0
>>281
人格攻撃もどっこいじゃない?
2022/12/22(木) 19:25:45.86ID:smn+2blz0
技術板なんだから、お互いの技術向上と切磋琢磨で活用したい
多少のちゃちゃ入れはいいかもしれんが、
2022/12/22(木) 19:33:35.57ID:pS7gMn7x0
Cはプログラマを信用してるから最小設計ポインタドーン!
286デフォルトの名無しさん (ワッチョイ 7e30-ZR1D)
垢版 |
2022/12/22(木) 19:36:06.08ID:mFK9O5hM0
この流れで「どっこいどっこい」じゃなくて「どっこい」で来るのか、、、

なるほどね
2022/12/22(木) 20:01:31.68ID:gat4VRlWM
どすこいじゃなくて良かったじゃん
2022/12/22(木) 20:08:02.26ID:YRfbWBEUM
まあまあ喧嘩せんでくれ
自分はCに致命的に向いてないんだろう

例えば、20年Cに挑んでどうしても理解できなかったのがポインタのポインタ
**argvがわからないのでコマンドライン引数を使うアプリが作れず挫折
実はPythonにも*と**があって絶望しかかったのだけど、これはPythonを使う上で必須ではないようでセーフ
2022/12/22(木) 20:13:27.78ID:LbQSD5ER0
あれは結局言語仕様がおかしいんだよな
Cで書く人はみんなargvを憎んでいる
2022/12/22(木) 20:29:10.73ID:N0yJkasM0
アンカーだけのレス
へのアンカーなら分かるだろ
2022/12/22(木) 20:50:41.85ID:PKP5vjg/0
>>286
この流れで揚げ足取れるのが凄いわ
どっこいどっこいの略とまで書かないと理解できないとも思わなかった
ごめんね
2022/12/22(木) 21:05:30.63ID:mFK9O5hM0
>>291
なぜ「どっこい」のレスで切らんかったの?
あそこで切ったら、ある意味勝ちだったのに
そういうとこだよね
2022/12/22(木) 21:22:01.08ID:dL3lthyL0
>>288
> **argvがわからないのでコマンドライン引数を使うアプリが作れず挫折
それchar *argv[ ]って書けば多少理解し易い
要するに文字列(char *)の配列だから
2022/12/22(木) 21:34:51.38ID:oY+OEcI00
>>292
なぜ?勝ち負けを求めてるわけじゃないから
もしかしてレスにいちいち勝ちを求めてるの?疲れない?
2022/12/22(木) 21:36:57.96ID:dL3lthyL0
↑ どう見ても負けず嫌いw
2022/12/22(木) 21:52:19.67ID:LbQSD5ER0
プログラミングのハードルが下がったなと実感する瞬間である
2022/12/22(木) 22:02:44.58ID:mFK9O5hM0
>>294
つまらないレスをする人って
それがわからないからつまらないレスをする訳だが
その人がレスを続けたところで当然内容はつまらない
せっかくそこそこ面白いのを出したんだから
面白い状態で終わらせとけばいいのにと思って
「やっぱりつまらないよねー」で終わっちゃったよね
2022/12/22(木) 22:05:02.75ID:c+J4V8f90
#include <stdio.h>をおまじないって説明すると馬鹿にされるけどさ
Cの入門書なんかで#include <stdio.h>を「今はとりあえず、おまじないと思っておいてください」みたいな説明してるとマニアックな人から糞本扱いされるけど、じゃどんな説明するのが正解なんだろうか。

hello worldを書いてる初心者に、プロトタイプとかマクロとかから説明するのだろうか。

なぜプロトタイプみたいのが必要かって言うと、printf()は分割コンパイルでライブラリというものに入っていて……とか初心者が納得のいくまで説明をしなきゃならないのか。

「stdio.hというファイルにprintf()を使うための情報が入っているのでそれを取り込む命令です。詳しいことはおいおいわかりす」って簡単に説明するなら「今はおまじないとおもっていてください」と大差ないし。

バシッと納得のいく説明の例を教えてほしい。
2022/12/22(木) 22:07:40.99ID:smn+2blz0
ハードル下がってプログラマ人口が増えると良いね
2022/12/22(木) 22:24:53.66ID:LbQSD5ER0
論理的に考えられる人が増えたらいいとは思う
2022/12/22(木) 23:02:38.79ID:TDhKeJEe0
>>297
面白いレスサンキュー
2022/12/23(金) 08:01:48.05ID:Xg/JPq4Q0
>>298
外部の読み込むのがinclude
stdio.hを読み込むとprintfのような基本的な関数が使えるようになる
くらいの説明なら初心者でも分かるんじゃない
2022/12/23(金) 08:14:41.70ID:Z/1nZoBr0
実際にはプロトタイピングしているだけなので、includeしなくてもexternしてしまえば使える
2022/12/25(日) 15:05:08.45ID:szxk8o6ud
>>298
糞本扱いする人が糞だということにすれば問題なし
2022/12/25(日) 15:48:44.62ID:itz3wrzY0
おまじないがダメなら料理に例えようw
2022/12/25(日) 21:04:49.84ID:UDG4tDm5
バリデーション管理しやすくかつクラスを普通の関数のように扱いたいのですがどうしたら良いでしょか・・
用途はありませんが試しに足し算するだけのクラスを実装してみました

from typing import Optional
from pydantic import BaseModel

class _Sum(BaseModel):
a: int
b: int
def sum(self):
return self.a+self.b

#sum()を使うまでに段階を踏んでしまう
Sum=_Sum(a=3,b=3)
print(Sum.sum())
#sum(2,3)のように使いたい

#やりたいことは↓こんな感じで、自分で作ってみました
https://ideone.com/mQQPoc
後々に”偶数しかダメ”とかsum09自体を拡張したりとかしたいです
2022/12/25(日) 21:37:54.73ID:ZZol25Zb0
>>306
_Sumクラスのインスタンス生成時に型とかチェックしたい内容だけ渡すようにして、sumの中でそのチェックをするとか
2022/12/25(日) 23:13:02.03ID:ICQtDf1md
「普通の関数だと拡張性が弱まる」の意味がわからん
普通の関数のようにクラスのインスタンス化と特定のメソッドの呼び出しを実行できたとして、
そのインスタンスに後でアクセスする方法はないのだから関数ではなくクラスであることに何の意味もない
引数をバリデーションしたいだけなら、普通に引数に渡された値が条件を満たしていなければエラーを投げる関数を作って関数の先頭で普通に呼べばよい
アノテーションとタイプ数変わらないだろ
2022/12/25(日) 23:24:11.94ID:ICQtDf1md
あと、単に関数の処理としてクラスに実装された機能を利用したいということであれば、関数の中でそのクラスのインスタンスを作って目当てのメソッドを呼べばいいだけだ
トリッキーな仕掛けなど何一つとして必要ない
2022/12/25(日) 23:32:47.68ID:B6BX6vu/0
逆説だけど同一だからって関数内で関数呼ぶならデコレータの存在意義ないやん
コードの理解を和らげるためにあるんで
2022/12/25(日) 23:41:27.55ID:UDG4tDm5
>>308
ちなみに>エラーを投げる関数を作って
的なのを実装するとどういう感じになりますか?
少し前に自分でやったのはかなり簡略しますがこんな感じになりました
def must_be_int(n):
 if type(n) is not int:
  raise TypeError(f"type error:'{n}' is not int")
 return n
def sum(a:int,b:int) -> int:

 return must_be_int(a)+must_be_int(b)
print( sum(2,3) )
print( sum(2,"3") )

ただこれだとsum関数のロジック
2022/12/25(日) 23:43:25.19ID:UDG4tDm5
途中でした
ただこれだとsum関数のロジック内にチェックする関数が混在してくるので分けたいなと思い
must_be_int(a)
must_be_int(b)
return a+b
にしたりと、なんかしっくりこなくて・・
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況