Pythonのお勉強 Part75 (921レス)
Pythonのお勉強 Part75 http://mevius.5ch.net/test/read.cgi/tech/1743698824/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
459: デフォルトの名無しさん (ワッチョイ c74b-oU0i) [sage] 2025/07/15(火) 22:25:50.08 ID:87Shwf9/0 すいません、パイソンを勉強中なのですがわからないところがあって1点質問さしてください キーワード専用引数を条件によって与えたり与えなかったりするにはどうすればいいんでしょうか 無論 if True: hoo(hoge=3) else: hoo(hoge=3, fuga=21) のようにイフ文で分けることは出来ると思うんですが、これしか方法がないでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1743698824/459
460: デフォルトの名無しさん (ワッチョイ ca67-AbPb) [sage] 2025/07/16(水) 00:25:55.49 ID:0/7fxfRI0 >>459 辞書アンパックでググると幸せになれるかもしれない http://mevius.5ch.net/test/read.cgi/tech/1743698824/460
461: デフォルトの名無しさん (ワッチョイ ca67-AbPb) [sage] 2025/07/16(水) 00:26:54.53 ID:0/7fxfRI0 >>459 辞書アンパックでググると幸せになれるかもしれない http://mevius.5ch.net/test/read.cgi/tech/1743698824/461
466: デフォルトの名無しさん (ワッチョイ 0d7c-YjA1) [] 2025/07/18(金) 18:45:16.88 ID:u+VO7eGe0 >>459 三項演算子使う。TrueのところがxがTrueという場合 def hoo(hoge, fuga): print(hoge, fuga) x=True hoo(hoge=3, fuga=21 if not x else None) http://mevius.5ch.net/test/read.cgi/tech/1743698824/466
467: デフォルトの名無しさん (ワッチョイ 9360-mivq) [sage] 2025/07/18(金) 19:36:23.31 ID:NjJf0MuU0 引数としてNoneを渡すのが引数なしと同じ意味になるかどうかは関数の仕様に依存するんじゃない? 三項演算子を使うなら hoo( hoge = 3 ) if x else hoo( hoge = 3, fuga = 21 ) の方が無難な気がする。ただ、これは>>459と本質的に変わらないし、459と比べて可読性がどうかは微妙なところ。何回も繰り返すのでできるだけ少ない行数で書きたいとかじゃなければ、結局、459の書き方が一番分かりやすいんじゃないかなぁ。 関数側に変更を加えてもいいなら>>460の指摘するとおり可変長キーワード引数を使うのもありだけど、関数内部でhoge, fuga以外のキーが使われないことからすると、個人的にはちょっと抵抗があるかな。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/467
475: デフォルトの名無しさん (ワッチョイ d010-mivq) [sage] 2025/07/18(金) 23:43:46.64 ID:bJpxei9t0 関数hooの内容はブラックボックスにしておいた方が本質的な議論になるのは確かだと思うけど、可変長キーワード引数を使うのは(一般論としては)やっぱり抵抗感があるんだよね。 関数hooのその可変長キーワード仮引数は、hogeをキーとして持ち、さらにオプションでfugaもキーとして持つことができる辞書ということになるけど、そのことはコメントかリファレンスにでも書いておかないと関数のユーザー側からは分からないよね。普通、関数の仮引数に可変長キーワード引数がある場合、ユーザー側は任意のキーワード引数が渡せるものだと想定するものものだと思うんだが。任意のキーワード引数が渡せるわけではないこと(渡せるキーワード引数が一定範囲に限定されていること)を示唆するためにkwargsに代えて別の名前を使うことも考えられるけど、hoge_fugaみたいな仮引数名にするくらいなら素直に>>459で書いた方がずっと分かりやすいのではないかと思う。 hogeとfugaが何らかの設定項目のようなもので、可変長キーワード引数としてsettingsみたいな名前を使うのがぴったりくるようなシチュエーションなら良いと思うんだけどね。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/475
481: デフォルトの名無しさん (ワッチョイ 9360-mivq) [sage] 2025/07/19(土) 09:53:59.24 ID:RatjLwY90 >>479 スマンが、値Noneがデフォルト値として適切なケースならそれでもいいけど、一般的にそうとはいえないという点は、数値0と同じだと思う。 とはいえ、>>459に対する一般的な回答とはいえなくても、個別のケースを見れば何らかの適切なデフォルト値(多くの場合は、数値0, 1, None, 空文字烈のどれかでカバーできるんじゃないかと思う)を見つけられることが多いと思うから、実践的にはそれで十分と言えるかもしれない。 ただ、そもそも論として、複数の実引数を1つの辞書にまとめ、関数に渡すときに**でアンパックするという方法論は、本質的には場合分けを行う場所を移しているだけだよね。475末尾のsettingsのように、1まとまりのものと観念できるような場合にはともかく、一般論としては>>459と比べて分かりやすくなっているとはいえないと思うよ(辞書の名前という余分な情報が増える分だけ、読む側の負荷が増えるだけなのでは)。 http://mevius.5ch.net/test/read.cgi/tech/1743698824/481
485: デフォルトの名無しさん (ワッチョイ d401-1hpD) [sage] 2025/07/19(土) 11:21:54.47 ID:GfjIQpqe0 >>481 分岐が必要なキーワード引数が1つだけなら>>459のように単純なif-elseのほうが分かりやすいと思うが数が増えてくると辞書を使うやり方のほうが分かりやすくなることが多い ちゃんとしたプログラムならBuilderパターン使って辞書を隠蔽したAPIを用意するけど内部構造は>>479と同じ http://mevius.5ch.net/test/read.cgi/tech/1743698824/485
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.076s