2013-01-23 17 views
18

Pythonの組み込みのcoerce関数の一般的な用途は何ですか?数値as per the documentationtypeがわからない場合は適用することができますが、その他の一般的な使用方法はありますか?算術演算を実行するときにcoerce()も呼び出されると思います。x = 1.0 +2。これは組み込み関数なので、恐らく共通の潜在的な可能性がありますか?Pythonのcoerce()は何のために使われていますか?

+6

は、「あなたはshouldn、(1) – NPE

+2

はあなたがにリンクされているドキュメントのセクションの上部にノートを読んでいる場合はPython 2.6または3 – imreal

+11

に使用されていない、推奨されていません ')(強制'聞いたことがありませんそれを使用するか、それが存在するかどうかを知る必要はありません。 – geoffspear

答えて

13

これは、early pythonの左にあります。基本的には、数字のタプルが同じ基礎的な数値型になります。

>>> type(10) 
<type 'int'> 
>>> type(10.0101010) 
<type 'float'> 
>>> nums = coerce(10, 10.001010) 
>>> type(nums[0]) 
<type 'float'> 
>>> type(nums[1]) 
<type 'float'> 

それは、オブジェクトが古いクラスと数字のように行動できるようにすることもある
(ここでは、その使用の悪い例は次のようになります...)

>>> class bad: 
...  """ Dont do this, even if coerce was a good idea this simply 
...   makes itself int ignoring type of other ! """ 
...  def __init__(self, s): 
...    self.s = s 
...  def __coerce__(self, other): 
...    return (other, int(self.s)) 
... 
>>> coerce(10, bad("102")) 
(102, 10) 
2

Pythonのコアプログラミングは言う: "機能coerce()はPythonインタプリタに依存しないプログラマを提供しますが、カスタムの2つの数値型変換を提供します。 "

>>> coerce(1, 2) 
(1, 2) 
>>> 
>>> coerce(1.3, 134L) 
(1.3, 134.0) 
>>> 
>>> coerce(1, 134L) 
(1L, 134L) 
>>> 
>>> coerce(1j, 134L) 
(1j, (134+0j)) 
>>> 
>>> coerce(1.23-41j, 134L) 
((1.23-41j), (134+0j))