source code of a function object

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Fernando Rodriguez

    source code of a function object

    Hi,

    Is ti possible to get the source code of a given function object? O:-)

    TIA
  • Erno Kuusela

    #2
    Re: source code of a function object

    Fernando Rodriguez <frr@easyjob.ne t> writes:
    [color=blue]
    > Hi,
    >
    > Is ti possible to get the source code of a given function object? O:-)
    >
    > TIA[/color]
    [color=blue][color=green][color=darkred]
    >>> import pickle, inspect
    >>> print inspect.getsour ce(pickle.dumps )[/color][/color][/color]
    def dumps(obj, protocol=None, bin=None):
    file = StringIO()
    Pickler(file, protocol, bin).dump(obj)
    return file.getvalue()
    [color=blue][color=green][color=darkred]
    >>>[/color][/color][/color]

    -- erno

    Comment

    • anton muhin

      #3
      Re: source code of a function object

      Fernando Rodriguez wrote:
      [color=blue]
      > Hi,
      >
      > Is ti possible to get the source code of a given function object? O:-)
      >
      > TIA[/color]

      I'm not an expert, but I'd say that mostly yes, however:

      def foo():
      pass

      bar_code_block = compile('def bar(): pass', '<string>', 'exec')
      exec bar_code_block

      import inspect

      assert 'foo' in locals()
      print inspect.getsour ce(foo)

      assert 'bar' in locals()
      print inspect.getsour ce(bar)

      Python2.3:
      def foo():
      pass

      Traceback (most recent call last):
      File "source.py" , line 13, in ?
      print inspect.getsour ce(bar)
      File "D:\Python23\li b\inspect.py", line 549, in getsource
      lines, lnum = getsourcelines( object)
      File "D:\Python23\li b\inspect.py", line 538, in getsourcelines
      lines, lnum = findsource(obje ct)
      File "D:\Python23\li b\inspect.py", line 408, in findsource
      raise IOError('could not get source code')
      IOError: could not get source code

      Therefore, I'd suggest that you can get source code of functions that
      are not created with eval/exec etc.

      of course, you cannot get source code of C functions (e.g. most of
      builtins, I suppose).

      regards,
      anton.

      Comment

      Working...