Maybe something on the order of this might reliably get you what you want (I don't check for no objects case - you can add that):
def ngetName(obj): ....: n=[k for k,v in globals().items() if v is obj] ....: n.sort(reverse=True) ....: return n[0] On Wed, Dec 17, 2008 at 5:00 PM, Yarko Tymciurak <yark...@gmail.com> wrote: > 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 <yark...@gmail.com>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 <denes1...@yahoo.ca> 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 web2py@googlegroups.com To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---