2016-06-13 5 views
0
L=[5,10,4,2,8,7] 
def compare(a,b): 
    return cmp(b,a) 

L.sort(compare) 
print (L[-2]) 
L.sort() 
print (L[2]) 

このコードを実行すると、sort関数内で呼び出された関数compareに2つの引数が指定されていないため、例外がスローされないのはなぜですか? コードが実行されるときには、(比較)L.sortに比較呼び出しされていないパラメータを定義せずに引数を取るPython関数を呼び出すとどうなりますか?

4 
5 
+3

なぜcompare()が2つの引数で呼び出されないと仮定しますか? 'cmp'引数として' compare() 'を' list.sort() 'に渡し、コールバックは二つの引数で呼び出されます。 – dhke

+0

彼は明らかに彼が投稿したスニペットの意味を理解していなかったので、これが彼に求めているのです – BlueTrin

答えて

1

あなたが直接あなたが渡している機能

を呼び出していないことに注意してください

L=[5,10,4,2,8,7] 
def compare(a,b): 
    print 'comparing ',a,b 
    return cmp(b,a) 

L.sort(compare) 
に従ってソート関数「ポインタ」またはあなたがより多くのデバッグ情報が必要な場合は、コンパレータ

として使用される機能への「参照」に比較されているものを印刷する行を追加します。

となっており、呼び出しは、配列 の順序の問題を解決するには、いくつかの方法がある

Lのディスオーダーに依存するいくつかのものであるマージソート、バイナリソートおよびさらに他

これはソースコードにlinkありますPythonリストオブジェクトの

0

、通りに出力を提供します。ソートによって内部的に呼び出される関数への参照を渡すだけです。

他の引数は必要ありません。あなたが実際にあなたがL.sortを((比較))書かれているだろう、それを呼んでいたので、もし、あなたが使用する機能を()を呼び出すために

+0

ソート関数はどのようにa、bパラメ​​ータを定義しますか? –

+0

それはありません。それは単に呼び出すことができる機能を期待しています。 https://docs.python.org/3/library/stdtypes.html#list.sort – rgargente

関連する問題