I'd left my last python instance up; here's your "copy" version (which just copies the current references; it _does_ seem to get rid of the transient, underscore-only (one, two, three) references ... but that seems little.
Instead of copy, you could do k.sort(reverse=True), and then return k[0] - that would at least be more reliable. Here's my results with your latest suggestion: In [50]: import copy In [51]: def cgetName(obj): ....: g=copy.copy(globals()) ....: return([k for k,v in g.items() if v is obj]) # don't need 'None' to return list; empty list o.k. ....: In [52]: cgetName(f._db) Out[52]: ['db', '_5', '_31'] In [53]: cgetName(db) Out[53]: ['db', '_5', '_31'] In [54]: getName(f._db) Out[54]: ['db', '_5', '_31'] In [55]: getName(db) Out[55]: ['db', '_5', '_31'] -------- Regards, Yarko On Wed, Dec 17, 2008 at 4:52 PM, Yarko Tymciurak <[email protected]> wrote: > depending on what you've done / referenced before you get the copy, your > list will differ... > > The underscores (single, double, triple) do appear to be transient; the > others are internal references. > > No matter what, that ****[0] just won't work. I've already tried this on > a couple of different machines, and I _can_ get to where 'foobar' is item[0] > in the list - sometimes, and not reliably. More often, it's _sometimes_ > item[0]; an activity (like a reference) disrupts that list. > > Anyway, this is interesting - good luck. I think you'll have to get the > list, and manually remove the '_names' (including '__); > > Look at my first "test results" post of this thread - '_5' was at the head > of that list (due to what activity happened, and how references were > generated) ---- it stayed at the head of the list; '_5' does not seem like > intermediate results, rather internally generated reference(s). Those > references seem to "stay around" ... don't know for what length of time, but > certainly the duration of my tests (gc might clean them up). > > Another time, '__' was at the head, but (as you noticed) that's transient, > and went away. > > I think you have _incidentally_ hit on cases where item[0] just happens to > be what you want. It doesn't look to me like you can count on that. > > Regards, > Yarko > > > On Wed, Dec 17, 2008 at 4:30 PM, DenesL <[email protected]> wrote: > >> >> Yarko, >> >> I think those underscored keys come from intermediate results. >> Not sure about those double and triple ones. >> An improved version (of either J's or M's) would have to work with a >> copy of globals: >> >> import copy >> def getName(obj): >> g=copy.copy(globals()) >> return([k for k,v in g.items() if v is obj]+[None])[0] >> >> I don't get any underscores this way, how about you?. >> >> >> >> > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py Web Framework" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---

