See exactly what a function has returned
Brad Tilley
bradtilley at usa.net
Wed Sep 15 14:35:20 EDT 2004
Peter Grayson wrote:
> This function does not do what you are expecting; type(function) does
> not return the type that function returns, it returns the type of the
> object passed in.
>
> def foo():
> return 42
>
>
>>>>print foo
>
> <function foo at 0xf6f888ec>
>
>>>>print type(foo)
>
> <type 'function'>
>
> Because Python is a dynamically typed language, it is not possible for
> the interpreter to know what type of object a function returns without
> executing it. In fact, it is possible for a function to return
> different kinds of things. For example:
>
> def bar(x):
> if x == 0:
> return 42
> elif x== 1:
> return "Forty-two"
> else:
> return None
>
> In a statically typed language, like C, we neccessarily know what type
> of thing is returned and we know it at compile-time. In Python, the
> type of the returned object is only bound at run-time. In practice,
> this means that we usually have to "just know" what a function returns
> by knowing the intended semantics of the function. That said, you
> could write a function like this that tells you about the return type
> of a function for a given invocation of that function ...
>
> def characterize(f, *args):
> r = f(*args)
> print type(r)
>
>
>>>>characterize(bar, 0)
>
> <type 'int'>
>
>>>>characterize(bar, 1)
>
> <type 'str'>
>
>>>>characterize(bar, 2)
>
> <type 'NoneType'>
>
> Hope this helps.
>
> Pete
Yes, it was very helpful. Thanks Pete.
More information about the Python-list
mailing list