On Wed, 28 Feb 2018 18:01:42 +1100, Chris Angelico wrote: > If you really want a list of ALL the local names in a function, you can > look at its __code__ object, which has a tuple of variable names: > > print(func1.__code__.co_varnames) > > That information is static to the function, as it is indeed determined > when the function is compiled.
Ho ho ho, not in Python 2 it isn't!!! py> def bizarre(): ... x = 1 ... from math import * # oww my aching head! ... print 'sin' in locals() ... print sin ... <stdin>:1: SyntaxWarning: import * only allowed at module level py> bizarre() True <built-in function sin> py> bizarre.__code__.co_varnames ('x',) In Python 2, you can also use exec inside a function, for extra obfuscatory goodness. Python 3 locks down these loopholes, and ensures that locals inside functions can be statically determined. -- Steve -- https://mail.python.org/mailman/listinfo/python-list