Tobias Weber a écrit :
Hi,
being new to Python I find remarkable that I don't see any side effects. That's especially true for binding. First, it is a statement, so this won't work:

   if x = q.pop():
      print x # output only true values

Second, methods in the standard library either return a value OR modify the reciever, so even if assignment was an expression the above wouldn't work.

Only it still wouldn't, because IF is a statement as well. So no ternary:

   x = if True: 5 else: 7;

However there is one bit of magic, functions implicitly return None. So while the following will both run without error, only one actually works:

   x = 'foo'.upper()
   y = ['f', 'b'].reverse()

Now I mentioned that the mutable types don't have functions that mutate and return something, so I only have to remember that...

But I'm used to exploiting side effect, and sometimes forget this rule in my own classes. IS THERE A WAY to have the following produce a runtime error?

   def f():
      x = 5
      # no return

   y = f()

Maybe use strict ;)

Hello

Just to note that if "['f', 'b'].reverse()" doesn't return the new value, there is a corersponding function : "reversed(mylist)" which does it (idem, sorted(list) <-> list.sort()) B-)

Concerning your question on warnings, well I guess that after a little time in python, you won't make mistakes on "side effects" anymore ;

But if you want to add checks to your methods, you should see towards decorators or metaclasses : they allow you to wrap your methods inside other methods, of which the only point couldbe, for example, to check what your methods returtn and raise a warning if it returns "None". But the problem is, sometimes you WANT them to return None....

If you want to detect methods that don't have explicit "return" statements, then you'll have to play with abstract syntax trees it seems... much trouble for not much gain.
I guess you'll quickly get the pythonic habits without needing all that ^^

Regards,
pascal

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to