2014-01-22 52 views
2

當我在Python(v2.7)中編寫函數時,我經常想到其中一個參數的類型。我正在與莫的難以置信的輝煌的pandas圖書館合作,所以我的論點往往是'打算'爲pandas.DataFrame s。Python:告訴我的IDE什麼類型的對象是

在我最喜歡的IDE(Spyder)中,當輸入句點.時,會出現一個方法列表。此外,當您鍵入方法的左括號時,文檔字符串將顯示在一個小窗口中。

但是對於這些工作,IDE必須知道變量是什麼類型。但當然它從來沒有。我失去了一些東西很明顯關於如何編寫Python的代碼(我讀過Python Is Not Java但它並沒有提到這一點IDE自動完成的問題。

有什麼想法?

回答

10

我不知道它是否適用於Spyder,但許多完成引擎(例如Jedi)也支持斷言來告訴它們變量是什麼類型。例如:

def foo(param): 
    assert isinstance(param, str) 
    # now param will be considered a str 
    param.|capitalize 
      center 
      count 
      decode 
      ... 
1

如果你使用Python 3,你可以使用。function annotations舉個例子:

@typechecked 
def greet(name: str, age: int) -> str: 
    print("Hello {0}, you are {1} years old".format(name, age)) 

我不使用Spyder的,但我會假設有一種方式,它讀取的註釋和採取適當的行動

+0

糟糕。應該指定Python 2.7.1。我會更新這個問題。 – LondonRob

3

我不知道是否Spyder的讀取文檔字符串。 ,但PyDev呢:

http://pydev.org/manual_adv_type_hints.html

所以您可以記錄在文檔字符串,如預期的類型如在:

def test(arg): 
    'type arg: str' 
    arg.<hit tab> 

然後你會得到相應的字符串選項卡完成。

同樣,您可以記錄函數的返回類型,以便您可以獲得foofoo = someFunction()的製表符完成。

與此同時,文檔字符串使自動生成的文檔更有幫助。

+0

太棒了!謝謝 – volcano

+0

天哪。 Spyder人,Spyder能做到這一點嗎? (我的早期實驗建議不,但我不想寫它!) – LondonRob

+2

(* Spyder dev這裏*)@LondonRob對不起,我們不支持。我們僅限於我們使用的代碼完成庫(稱爲'rope')提供的功能。也許這是在一個名爲'jedi'的新庫中實現的(支持它即將到來),但我真的不知道。 –

2

問題是與Python的動態特性,我使用Spyder和我已經使用了更多的Python IDE(PyCharm,IDLE,WingIDE,PyDev,...),他們都有你說的問題這裏。因此,當我想要代碼完成以獲得幫助時,我只是將該變量實例化爲我想要的類型,然後鍵入「。」,例如:假設您知道在某段代碼中您的變量df將是DataFrame,則可以這樣做df = DataFrame()並且現在在代碼完成時應該爲你工作,只要在編輯代碼時不要忘記刪除(或註釋)行df = DataFrame()

2

其實我用的IntelliJ IDEA(又名pyCharm),他們提供多種方式來指定變量類型:

1.指定簡單變量

很簡單:只需添加一個帶有定義後面的類型信息的註釋。從現在起,Pycharm支持autocompleition!例如:

def route(): 
    json = request.get_json() # type: dict 

來源:https://www.jetbrains.com/help/pycharm/type-hinting-in-pycharm.html

2.指定參數

添加三個報價特徵的方法開始之後和想法會自動完成文檔字符串,如下面的例子:

example of method parameters

來源:https://www.jetbrains.com/help/pycharm/using-docstrings-to-specify-types.html

(目前在我的手機上,會讓它更晚點)

相關問題