0

ファイルがあるとします

# func.py:

def function():
    print 'Hello'
    print 'World'

そして、同じディレクトリに別のファイルがあります

# load.py:

import sys
import inspect
from func import function

次の方法で関数のソースにアクセスできるようになりました。

code = inspect.getsourcelines(sys.modules['function'])

とにかく、関数の行を編集して、印刷する場合に作成できるものはありますか:

「Hello World」ではなく「Hello There World」?

関数をその場で編集して、これをすべてメモリ内で実行したいと思います。現在、ソースを読み取って一時ファイルに書き出すときに編集し、一時ファイルをインポートすることで同じ効果を達成していますが、外部ファイルは完全に避けたいと思います。

4

3 に答える 3

0

引数を持つ関数が必要です。

def function(greeting='Hello', target='World'):
    print greeting, target

他のファイル:

function()   #prints Hello World

function(target='To The World')  #prints Hello To The World

これがあなたの望むものではない場合は、あなたが説明したことを実行して巨大な設計上の欠陥を作成することになると確信しているので、ユースケースを説明してください。

コメントで述べたように、自己修正プログラムは40年代/ 50年代に使用されましたが、その後は使用されませんでした。

于 2013-02-04T19:05:56.943 に答える
0

実際にそのコードを置き換えるのではなく、モンキー パッチを適用することを考えていますか。

  import func

  func.function()

  def monkey_boy():
      print "Monkey Boy"

  func.function = monkey_boy

  func.function()

与えます:

Hello
World
Monkey Boy
于 2013-02-04T17:18:33.297 に答える
0

これは実際には関数をその場で編集しませんが、そのモジュールの関数を一時ファイルなしで新しい関数に置き換えます (これで十分かもしれません):

import inspect
import func

code = inspect.getsourcelines(func.function)
lines = code[0]
lines.insert(2,"    print 'There'\n")

exec ''.join(lines)
func.function = function
于 2013-02-04T16:43:28.663 に答える