人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

なぜ Python では sorted 関数を sorted と命名したのでしょうか?

sort でもいいのではないかと感じました。

きっと何がしか意図があったとは思うのですが
その意図が汲み取れず質問させていただきました。

いまいち、何を言ってるか分からないかと思うのですが
思い当たることがありましたらご教示いただけると幸いです。


---
調べたり疑問に感じた点
---
?
list.sort 関数と同じ関数名にすると、やはり問題があるのでしょうか。
https://docs.python.org/ja/3/howto/sorting.html

?
現在形(引数)
返り値=過去分詞(引数)

という書き分けは
一般的な記述方法なのでしょうか。


> # list から要素を抜き出す exclude 関数, remove 関数と同義
> lst1 = [1,2,3]
> exclude(lst1, 1)
> lst1
[2, 3]

> lst2 = excluded([1,2,3], 1)
> lst2
[2, 3]

?
組み込み関数の一覧を見たのですが
関連する命名の規則性も見つけられませんでした。
https://docs.python.org/ja/3/howto/sorting.html

●質問者: domodomodomo
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● rsc
●0ポイント

こちらは参考になるでしょうか。

list.sort()は、破壊的なメソッドなので、元のリストオブジェクトの順序を入れ替えてしまいます。
sorted()は元のリストオブジェクトは壊しません。

http://akiyoko.hatenablog.jp/entry/2014/09/26/235300
http://minus9d.hatenablog.com/entry/2015/01/04/235442


domodomodomoさんのコメント
ご回答ありがとうございます。 破壊的代入であるかどうかは ?に記載下通り既に存じておりましたので ポイントの配布は控えさせていただきます。

2 ● a-kuma3
●500ポイント ベストアンサー

So the first one, "sort" is a verb, saying "sort this list".
The second one, "sorted" is more adjective-ish, so "sorted(l)" can be read like, "this list, sorted"

https://www.quora.com/Why-is-the-Python-sorted-function-called-sorted

Python のメンテナーが書いたわけではないと思いますが、感覚としては賛同できる(個人的な感想です)。

一般的かと言われると、特殊な部類だと思います。
破壊的ではない(自身を変更しない)sort メソッドは、javascript の Array.sort や Ruby の Array.sort なんかがそうです。
sorted という命名は、Swiftにあったりしますが、あまり見かけない感じです。


domodomodomoさんのコメント
いつも回答をいただき、 誠にありがとうございます。 一般的な命名方法ではないんですね。 経験が足りていないので その一言をいただけると とても参考になります。

domodomodomoさんのコメント
命名規則で悩んでいたので 多言語の例も上げていただいて 大変勉強になります。

a-kuma3さんのコメント
メソッドと関数で意味合いというか、感じ方は変わってくると思います。 メソッドの場合には、対象のオブジェクトに対しての命令になるので (I make) [object] sort が [object].sort() なのだと思います。 関数の場合は、処理が主体になりますが、語順は自然言語と入れ替わりますが、やっぱり引数に対する命令なので、 sort([object]) という命名の方が多いと思います。 # 手続き型言語から OO へ移った人には、同意してもらえると思う sorted は、 which is)sorted [object] という、過去分詞というよりは受け身を形容詞的に使っているイメージなのだと思います。 もしかして関数型言語の慣わしか、とか思って、Lisp とか Scheme とかを絡めて検索してみたのですけれど、そういった検索結果は得られず、という感じでした。 何やら、こだわりが感じられる気はしますが、Ruby だと Array.sort ─ 別インスタンスを返す Array.sort! ─ 破壊的 という感じなので、 List.sorted ─ 別インスタンスを返す List.sort ─ 破壊的 の方が、しっくりくるなあという気がします(個人的な感想 何故に関数なんだかなあ、と >Python

domodomodomoさんのコメント
勉強になります。ありがとうございます。 このような関係ということですね。 形容詞 名詞 sorted(list_obj) 動詞 名詞 list_obj.sort() # sort list_obj またあまり一般的な書き方でないということで ひとまず私の小さいコードの中で使うのは、止めようと思います。 いくつかご教示いただいた内容を元に、すこし考えてみました。 --- > 何故に関数なんだかなあ、と >Python 考えたこと --- [https://docs.python.jp/3/library/stdtypes.html#sequence-types-list-tuple-range:title=シーケンス]についての処理は、関数として定義されていたり(max)、メソッドとして定義されていたり(index)バラバラみたいですね...。メッソドと関数にわけた理由が、可読性を意識されたのか、背景がすこし気になります。 ○ 仮説: クラスごとに sorted を実装するのが面倒だから? → 違う。sequence は index, count などの共通のメソッドを持っている。 もし sorted 関数を属性に持つ sequence クラスのようなものが存在して、list, tuple, range がそのクラスを継承してくれていれば sequence_object.sorted() のように使えるような仕様になっていたのだろうと思いますが 実際には list, tuple, range, str クラスは object クラスを直接継承して生成されています。 >|python| >>> list.__bases__ (<class 'object'>,) >>> >>> tuple.__bases__ (<class 'object'>,) ||< だからここのクラスでメソッドを定義するのが面倒だからかな?とも思ったのですが index, count メソッドがシーケンスで共通に実装されています。 >>> 'Hello, world!'.index('l') 2 ○ sort が list 専用のメソッドである理由 list 以外のシーケンス tuple や str は immutable であったりして、破壊的代入を行う sequence.sort を行うことができないので sort メソッドは list 専用というのは、納得が行きます。 いつも、誠にありがとうございます。 今後ともよろしくお願いいたします。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ