On Thu, 13 Nov 2008 14:25:08 -0800, Paul Boddie wrote: > On 13 Nov, 18:16, Joe Strout <[EMAIL PROTECTED]> wrote: >> One thing I miss as I move from REALbasic to Python is the ability to >> have static storage within a method -- i.e. storage that is persistent >> between calls, but not visible outside the method. I frequently use >> this for such things as caching, or for keeping track of how many >> objects a factory function has created, and so on. > > Why not use a module global? It isn't hidden, but it is quite a clean > approach. Modifying your example...
For some definition of "clean". http://archive.eiffel.com/doc/manuals/technology/bmarticles/joop/ globals.html http://weblogs.asp.net/wallen/archive/2003/05/08/6750.aspx Python globals aren't quite as bad, because they are merely global to a module and not global to your entire application. Nevertheless, your example is one of the *worst* usages for globals. See below. > spam_count = 0 > > def spam(): > global spam_count > spam_count += 1 > return "spam " * spam_count > > [...] > >> This doesn't expose any uncleanliness outside the function at all. Nonsense. Any other function in the code can write to spam_count and cause all sorts of havoc. Any function that needs to temporarily modify spam_count needs to be careful to wrap it with a save and a restore: n = spam_count spam_count = 47 s = spam() spam_count = n This is precisely one of the anti-patterns that global variables encourage, and one of the reasons why globals are rightly considered harmful. Don't Do This. -- Steven -- http://mail.python.org/mailman/listinfo/python-list