簡體   English   中英

Python:告訴我的 IDE 對象是什么類型

[英]Python: tell my IDE what type an object is

當我用 Python (v2.7) 編寫函數時,我經常會想到其中一個參數的類型。 我在運動中使用了令人難以置信的出色pandas庫,所以我的論點通常“打算”是pandas.DataFrame s。

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

但是要使這些事情起作用,IDE 必須知道變量是什么類型。 但當然,它永遠不會。 我是否遺漏了一些關於如何編寫 Pythonic 代碼的明顯內容(我已經閱讀了Python Is Not Java,但它沒有提到這個 IDE 自動完成問題。

有什么想法嗎?

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

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

實際上我使用IntelliJ 想法(又名 pyCharm ) ,它們提供了多種方法來指定變量類型:

1. 指定簡單變量

很簡單:只需在定義后面添加帶有類型信息的注釋即可。 Pycharm 即日起支持自動補全! 例如:

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

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

2. 指定參數

在方法開頭后添加三個引號,這個想法將自動完成一個文檔字符串,如下例所示:

方法參數示例

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

(目前在我的手機上,稍后會制作)

如果您使用的是 Python 3,則可以使用函數注釋 舉個例子:

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

我不使用 Spyder,但我認為它有一種方法可以讀取注釋並采取適當的行動。

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

http://pydev.org/manual_adv_type_hints.html

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

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

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

同樣,您可以記錄函數的返回類型,以便您可以在foofoo = someFunction()獲得制表符foo = someFunction()

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

問題在於 Python 的動態特性,我使用 Spyder,並且我使用了更多的 Python IDE(PyCharm、IDLE、WingIDE、PyDev 等),並且所有這些都存在您在此處所述的問題。 因此,當我需要代碼完成以尋求幫助時,我只需將變量實例化為我想要的類型,然后鍵入“.”,例如:假設您知道您的 var df將是DataFrame代碼中的DataFrame ,您可以執行此df = DataFrame()並且現在代碼完成應該對您df = DataFrame() ,只是不要忘記在完成代碼編輯后刪除(或注釋) df = DataFrame()行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM