2011-06-10 163 views

回答

8

簡短的回答:沒有。龍回答:如果你啓用了readline的支持,您可以使用向上箭頭,「重新定義」這行由行。

+0

這對於使用命令歷史來說是致命的不方便,因爲當您幾次修改某個函數時,您並不知道它是在環境中定義的那一個。有沒有辦法打印環境功能代碼? – Leonid 2011-06-10 22:05:53

+0

所有名稱在IDLE使用的交互式解釋器的全局名稱空間內都是唯一的,因此您應該知道在您的環境中定義的最後一個名稱是定義的名稱空間。你能澄清一下你打算去打印環境功能代碼的意思嗎?你的意思是Python的源代碼? – jathanism 2011-06-10 23:05:10

+0

是的,打印功能源代碼。 – Leonid 2011-06-11 10:56:58

2

您可以最多牛肉的Python REPL了不少,甚至從它calling your favorite editor。如果您使用的是與鼠標的支持(如X照常)或屏幕的終端,只需滾動到最後一個函數定義,複製源,調用編輯器並粘貼到它。編輯品嚐,執行。

2

我一直在尋找一種方式來做到這一點我自己,我感到非常難過,這是不可能的,但我會分享我用一個快速的解決方法。

我沒有在控制檯中定義myFunction(),而是在文件myFile.py中定義它。在控制檯我然後導入:

import myFile 
from imp import reload 

我然後做一個指向我的功能(在長文件名的情況下),像這樣:

def pMyFunction(): 
    return myFile.myFunction() 

每當我想修改myFunction的,我這樣做在myFile.py中,然後重新加載模塊:

reload(myFile) 

沒什麼太花哨,但它幫助我擺脫困境。

1

您可以使用檢查模塊獲取當前的源代碼,然後重新定義函數:

from inspect import getsource 

def helloworld(): 
    print('Hello, World!') 

print(getsource(helloworld)) 

你甚至可以使用Python字符串的方法來改變它,然後用exec重新定義的功能。不過,我會考慮這種不好的風格。

from functools import getsource 


def helloworld(): 
    print('Hello, World!') 

old = getsource(helloworld) 
new = old.replace('Hello', 'Cheers') 
exec(new) 
helloworld()