Steven D'Aprano <[EMAIL PROTECTED]> writes:

> In *general* the compiler can't tell, but in specific cases it
> could. A (hypothetical) optimizing compiler would tell the
> difference between:
> 
> for item in alist[1:5]:
>     print item # no possible side-effects

The 'print' statement converts the 'item' to a str. That conversion
could, in a pathological case, have a side-effect (say, if the class
of 'item' had an overridden '__str__' method with side effects), and
the compiler can't know this isn't a pathological case.

> for item in alist[1:5]:
>     alist.append(item) # side-effects DON'T matter

The compiler doesn't know that, at the time of invocation,
'alist.append' doesn't have side effects that matter.

The compiler for a dynamic language like Python has very little
absolute "no significant side-effect in these specific cases"
guarantee of the kind you're assuming even in the cases you choose for
contrast with the ones that *do* have significant side-effects.

-- 
 \          "When we call others dogmatic, what we really object to is |
  `\        their holding dogmas that are different from our own."  -- |
_o__)                                                   Charles Issawi |
Ben Finney
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to