'complex' function with string argument.

Steven D'Aprano steve at pearwood.info
Tue Mar 18 00:08:11 EDT 2014


On Mon, 17 Mar 2014 21:22:18 +0200, Marko Rauhamaa wrote:

> Chris Angelico <rosuav at gmail.com>:
> 
>> On Tue, Mar 18, 2014 at 5:15 AM, Marko Rauhamaa <marko at pacujo.net>
>> wrote:
>>> Is "-2.0" a literal?
>>>
>>> What's the outcome of
>>>
>>>    -2.0.__str__()
>>
>> If you mean (-2.0).__str__(), then it returns '-2.0', but that proves
>> nothing.
> 
> The point is, you don't need to "philosophize" about complex literals
> when even negative numbers don't have literals in Python.

But Python *does* have complex (well, imaginary to be precise) literals. 
The j suffix to a number makes it complex:

py> type(2j)
<class 'complex'>


Complex numbers with both a real and imaginary component are not treated 
as literals:

py> import ast
py> ast.dump(ast.parse("2j"))
'Module(body=[Expr(value=Num(n=2j))])'
py> ast.dump(ast.parse("1+2j"))
'Module(body=[Expr(value=BinOp(left=Num(n=1), op=Add(), 
right=Num(n=2j)))])'


and in recent versions, the peephole optimizer optimizes them:

py> from dis import dis
py> dis("1+2j")
  1           0 LOAD_CONST               2 ((1+2j)) 
              3 RETURN_VALUE         



-- 
Steven



More information about the Python-list mailing list