On 2015-04-21 16:48, Cameron Simpson wrote:

But it would not be schizophrenic to write a function that returned a
name arbitrarily, by inspecting locals(). It depends whether you only
need a name, or if you need "the" name.

Write yourself a "find_name_from_locals(local_map, value)" function
that reports. That will (a) get you a partial answer and (b) cement in
your mind what is possible and why. Easy and useful!

Cheers,
Cameron Simpson <c...@zip.com.au>

Well I finally got around to tackling this little challenge and you are right:
It was illuminating.

For what it's worth, here's the code that made the light go on:
#!../venv/bin/python3
# -*- coding: utf-8 -*-
# vim: set file encoding=utf-8 :
#
# file: 'getname.py'
"""
Following through on:
Write yourself a "find_name_from_locals(local_map, value)" function that
reports. That will (a) get you a partial answer and (b) cement in your
mind what is possible and why. Easy and useful!
Cheers, Cameron Simpson <c...@zip.com.au>
"""
a = 'Alex'
j = 'June'
ssn = 681769931  # Totally ficticious!
# print(locals())
def get_name_1st_version(item):
    """What I naively thought would work."""
    for name in locals():
        if name == item:
            return name

def get_name(localmap, item):
    """As suggested.
    Returns 'a' name, not necessarily 'the' name."""
    for name in localmap:
        if localmap[name] == item:
            return name

if __name__ == '__main__':  # code block to run the application
    # First attempt:
    print(get_name_1st_version(a))
    print(get_name_1st_version(j))
    print(get_name_1st_version(ssn))
    print(get_name_1st_version('Alex'))
    print(get_name_1st_version('June'))
    print(get_name_1st_version(681769931))

    # Second attempt:
    localmap = locals()
    # Lesson learned: must use localmap created within the namespace
    # under scrutiny.
    print(get_name(localmap, a))
    print(get_name(localmap, j))
    print(get_name(localmap, ssn))
    print(get_name(localmap, 'Alex'))
    print(get_name(localmap, 'June'))
    print(get_name(localmap, 681769931))

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to