1

Python インタラクティブ コンソール (ipython ではなく、アイドル状態ではない) で関数を定義しましたが、後で何度もそれを確認する必要がありました。

例:

>>> def myf():  
...    print 1
...    print 2
...    print 3
...
>>>
>>> # a lot of scrolling
>>>  

以下の偽の出力例 (「名前 'print_function' が定義されていません」の代わりに) は、私が望むものを示しています。

>>> print_function(myf)
myf()
    print 1
    print 2
    print 3

Python に print_function のようなものはありますか? そうでない場合、どのように実装しますか?

4

8 に答える 8

0

これについてどの程度正式になりたいですか?あなたの応答が「あまりない」というものであった場合、関数のコードをdocstringにコピーしてから、 docを使用してdocstringを出力することができます

例えば:

def foo():
""" Prints a sequence of numbers to the terminal:
    print 1
    print 2
"""
print 1
print 2

print foo()
--> 1
--> 2

print foo.__doc__
--> Prints a sequence of numbers to the terminal:
--> print 1
--> print 2
于 2013-07-08T16:15:47.463 に答える
0

これを知ってビックリしましたが、各関数にはコードメソッドがあるので、次のように書いてみてください。

>>> def f():
print "hello world" 
>>> f.__code__
<code object f at 02C57188, file "<pyshell#5>", line 1>

ご覧のとおり、関数の正確なコードではなく、メモリに格納されているオブジェクトへの参照を提供するだけです。ただし、次のようなことができます。

>>> def roman():
print "Oh no!"
>>> roman.__code__ = f.__code__
>>> roman()
hello world
>>> 

それについてはわかりませんが、コードをファイルに書き込んで、後でこのファイルから読み取ることもできると思います。あなたは自分でいくつかの調査を行い、それをいじる必要があります。これが何らかの形で役立つことを願っています.

于 2013-07-08T16:20:39.653 に答える
0

これを行うには多くの方法があります。

インポートなし:

print myf.func_code.co_code 

しかし、おそらくバイトコードで終わるでしょう。これは次の方法で解決できます: http://www.crazy-compilers.com/decompyle/

また、検査方法に行くこともできます:

import inspect
import mymodule
print inspect.getsource(mymodule.myf)

または、dis を使用できます。

import dis

dis.dis(myf)

最後に、お勧めできませんが (セキュリティ上)、次のようなものがあります。

funcstring = """def myf():  
    print 1
    print 2
    print 3"""
func = eval(funcstring)

func.source = funcstring

print func.source
于 2014-12-13T12:01:06.753 に答える
0

これは私がそれを行う方法です:

    import inspect as i
    import sys
    sys.stdout.write(i.getsource(MyFunction))

綺麗に印刷して…

于 2018-02-08T20:17:06.327 に答える