2013-01-23 8 views
18

Quali sono gli usi comuni della funzione incorporata di Python coerce? Posso vederlo se non conosco lo type di un valore numerico as per the documentation, ma esistono altri usi comuni? Direi che coerce() viene anche chiamato quando si eseguono calcoli aritmetici, ad es.x = 1.0 +2. È una funzione integrata, quindi presumibilmente ha qualche potenziale utilizzo comune?Per cosa si usa la coerce() di Python?

+6

mai sentito parlare di 'coerce()' (+1) – NPE

+2

deprecato, non utilizzato su Python 2.6 o 3 – imreal

+11

Se leggete la nota nella parte superiore della sezione della documentazione si è collegato al, è shouldn' usarlo, né dovresti sapere che esiste. – geoffspear

risposta

13

È un numero rimanente da early python, in pratica fa sì che una tupla di numeri sia lo stesso tipo di numero sottostante, ad es.

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

E 'anche per consentire agli oggetti di agire come i numeri con le vecchie classi
(un cattivo esempio del suo utilizzo qui sarebbe ...)

>>> 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 nucleo programmazione dice: "Funzione coerce() fornisce al programmatore non fare affidamento sull'interprete Python, ma su una conversione di due tipi numerici personalizzati. "

ad es.

>>> 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))