[Python-Dev] [python] Re: trunc()
Michael Foord
fuzzyman at voidspace.org.uk
Fri Jan 25 00:32:07 CET 2008
Jeffrey Yasskin wrote:
> On Jan 24, 2008 1:11 PM, Raymond Hettinger <python at rcn.com> wrote:
>
>> [Raymond Hettinger]
>>
>>> Since something similar is happening to math.ceil and math.floor,
>>> I'm curious why trunc() ended-up in builtins instead of the math
>>> module. Doesn't it make sense to collect similar functions
>>> with similar signatures in the same place?
>>>
>> [Christian Heimes]
>>
>>> Traditionally the math module is a tiny wrapper around the
>>> system's libm. Functions for magic hooks like __trunc__
>>> usually end up in builtins. In this particular case I don't
>>> mind where the function is going to live.
>>>
>> Traditions have gone out the window. ceil() and floor()
>> are going to have their signatures changed (Real --> Integral)
>> and are going to have their own magic methods. They cannot
>> be characterized as a thin wrapper around libm.
>>
>> So the question stands, why is trunc() different? Can anything
>> good come from having trunc() and int() in the same namespace?
>>
>
> One of my goals for trunc() is to replace the from-float use of int(),
> even though we can't remove it for backward-compatibility reasons. PEP
> 3141 says:
>
> "Because the int() conversion implemented by float (and by
> decimal.Decimal) is equivalent to but less explicit than trunc(),
> let's remove it. (Or, if that breaks too much, just add a deprecation
> warning.)"
>
> That needs to be updated and implemented. I think the decision was
> that removing float.__int__() would break too much, so it needs a
> deprecation warning in 3.0.
>
> int has to be a builtin because it's a fundamental type. trunc()
> followed round() into the builtins. I have no opinion on whether ceil
> and floor should move there; it probably depends on how often they're
> used.
>
>
So you won't be able to construct an int from a float? That sucks (and
is unintuitive).
Michael
More information about the Python-Dev
mailing list