teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

更に追記

2018/04/29 06:10

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -36,4 +36,15 @@
36
36
  2. どっちもほしいときとか、どっちでも良いときは割と両方作ってあったりする(list.sort()とsorted()の違いを考えてみましょう)
37
37
  3. 破壊的な操作をして更に結果を返すという関数/メソッドはほとんど見かけたことがない。あると便利だけど、それ以上に事故の元になるという発想だと思います。
38
38
 
39
- これはPEPなどで明文化されてるのだろうか・・・。
39
+ これはPEPなどで明文化されてるのだろうか・・・。
40
+
41
+ ### 更に余談
42
+ > なぜ、len関数は括弧内に変数に入れて、meanは変数の後にメソッドで指定するのか、
43
+ > その背後にある考え方について教えていただけないでしょうか?
44
+
45
+ 上の私の回答はこれへの直接の回答になってないかもなので、追記。
46
+ len()の方は古(いにしえ)からある関数であります。オブジェクト指向原理主義者の人には「なんでメソッドにしないのよ」とよく言われるのですが(でも最近は見かけない気がする。古い記事でそういうのはたくさんある)、こういう理由でメソッドになっていないらしいです。
47
+
48
+ [len が py3k でも 関数のままである理由 - methaneのブログ](https://methane.hatenablog.jp/entry/20090721/1248195293)
49
+
50
+ numpyのmeanメソッドは、numpy作った人たちの思想です、としか言いようがないです。

1

変更

2018/04/29 06:10

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -30,7 +30,7 @@
30
30
  あまり考え方の違いとか、考えるだけ無駄な気がします・・・。
31
31
 
32
32
  ### 余談
33
- まあでも、だいたい次のような法則があり、組み込みや標準ライブラリの関数は大半のものが従っています(すべてではないのが厄介なところ)。
33
+ まあでも、だいたい次のような法則があり、組み込みや標準ライブラリの関数・オブジェクトは大半のものが従っています(すべてではないのが厄介なところ)。
34
34
  0. 破壊的な操作をする系のものは概ねメソッドにし、返り値はNone(list.sort()、list.reverse()などメソッドを呼んだ相手の中身が変わるもの)
35
35
  1. 非破壊的な操作は関数で、結果を返り値として返す(len()のようにオリジナルの中身に影響を及ぼさないものや、sorted()やreversed()など、オリジナルを変えないで新しい結果を作るもの・・・って今確認したらreversedはクラスだったよ! なんてこった! そういうこともありますね)
36
36
  2. どっちもほしいときとか、どっちでも良いときは割と両方作ってあったりする(list.sort()とsorted()の違いを考えてみましょう)