20

私は多くのPHPの経験を経て、Pythonを研究しています。そして、Pythonで型ヒントを使用すると便利です。PyDevを使用したEclipseはこれをサポートしていないようです。助言がありますか?

たとえば、IDEを使用するときに、次のように関数のdocstringtypeを表示したいとします。

def f(x: int) -> int:
    r"""Adds 3 to x"""
    return x + 3

f(# and now IDE shows everything about types 
4

5 に答える 5

13

Pythonは動的に型付けされた言語であり、変数の型を宣言する必要はありません。ただし、docstringで関数に渡されることを意図した予想される型に関する情報を追加できます。たとえば、

def f(x):
    """
    @x: int
    Adds 3 to x
    returns an int
    """
    return x + 3

しかし、この場合、関数は非常に単純なので、私の意見では型情報は必要ありません。Pythonでは、厳密な型を文書化するよりも、その機能を文書化する方が好まれることがよくあります。

pydevは、プロジェクトの一部としてpythonファイルを開き、Eclipseにドラッグドロップして個別に開かない限り、docstring(typesではない)の完了をサポートし、多くのエラーをキャッチします。

Propertiesプロジェクトルートを右クリックし、メニュー項目を選択PyDev - PYTHONPATHして左側のリストを選択し、 Add source folderPythonファイルを含むすべてのフォルダーをクリックして、Pythonファイルを含むフォルダーを追加する必要があります。pydevは通常、サブディレクトリにモジュールがある場合はそのサブディレクトリでモジュールを見つけることができる__init__.pyため、ルートpythonソースフォルダを追加するだけでよい場合が多いことに注意してください。

その後、入力するctrl+space 前に入力してツールチップにアクセスし、入力後に入力(して提案された関数の引数を自動入力します。ctrl+space (

http://pydev.org/manual_101_root.htmlのpydevマニュアルも参照してください。

于 2010-04-24T15:03:17.420 に答える
13

現在のPython2/3

ローカルスコープ変数と関数パラメーターの場合、PyDevには次のものがあります。

assert isinstance(obj, MyClass)
obj. # here hint will work

文書化されていない機能だと思いますが。これは、Sphinx構文を説明するタイプヒントといくつかの抜粋に関するPyDevの公式ページです。

class Example:

  def param(self, a):
    ''':type a: MyClass'''

  def var(self, iterable):
    for a in iterable: #: :type a: AnotherClass
        pass

残念ながら、どちらもクラスのメンバーには機能しません。

PyDev 4以降、PEP-484に似たものもあります(以下を参照)。

class LatestExample:

  def listcase(self, param):
    ''':type param: list[str]'''

  def dictcase(self, param):
    ':type param: dict[str, MyClass]'

将来のPython3

@slushyによる回答を見てください。間違いなくこれは未来です。ただし、当面の間、PyDevは関数アノテーション、PEP-3107 、または@slushyが示す新しいPEP-484のものをサポートしていません。PEP-484は、Python 3.5で限定された形式で提供され、最終的には3.6で提供されます。これは、タイプヒントとPEP-484に関するBDFLのPyCon2015プレゼンテーションです。

于 2011-07-29T14:37:24.800 に答える
9

2014年8月の時点で、関数定義でmypy構文の注釈型を使用するというGuido Van Rossumの提案があり、新しい構文は実際には有効なPython 3であると述べています。彼の提案の例(2014年9月の時点ではまだPEPではありません)

from typing import List, Dict

def word_count(input: List[str]) -> Dict[str, int]:
    result = {}  #type: Dict[str, int]
    for line in input:
        for word in line.split():
            result[word] = result.get(word, 0) + 1
    return result
于 2014-09-29T15:44:19.920 に答える
1

Pythonで型ヒントを行う方法を知りません。

標準のPythonicプラクティスは次のとおりです。

>>> def adds_three(number):
...     '''Returns number + 3'''
...     return number + 3
...     

私が次のことをしたことに注意してください:

  • 関数名はその動作が明確です
  • 引数の名前は、それがどうあるべきかについて明確です
  • docstringは、関数の機能を詳しく説明しています
  • Pythonは動的に型付けされた言語です。なぜユーザーが整数を入力するように制限するのですか?フローティングポイントも演算子をサポートします+。彼らにそれを使わせてください。

動的型付けの良い点の1つは、すべてのメソッドが継承的にオーバーロードされることです。もちろん、致命的なエラーを防ぐために、関数でいつでも型チェックを行うことができます。

于 2010-04-24T14:32:49.617 に答える
0

reStructuredTextepytext、およびpython3アノテーションは、Pythonコードで予期される型を定義でき、 pycharmなどのさまざまな統合開発環境でサポートされています。これは、メンバーのオートコンプリートを可能にするため、クラス名を定義する場合に特に便利です。

epytextの簡単な例:

def x_intercept(m, b):
    """
    Return the x intercept of the line M{y=m*x+b}.  The X{x intercept}
    of a line is the point at which it crosses the x axis (M{y=0}).

    @type  m: float
    @param m: The slope of the line.
    @type  b: number
    @param b: The y intercept of the line.  The X{y intercept} of a
              line is the point at which it crosses the y axis (M{x=0}).
    @rtype:   number
    @return:  the x intercept of the line M{y=m*x+b}.
    """
    return -b/m
于 2014-07-22T07:03:10.443 に答える