1

私はEclipseSWT/JFaceを使用してjythonアプリケーションを作成しています。いくつかの値を取得するには、float配列をJavaオブジェクトに渡す必要があります。私はそれにjarrayパッケージを使用しています。それを行うためのより多くのpythonicな方法はありますか?

bounds = zeros(4, 'f')
# from java org.eclipse.swt.graphics.Path.getBounds(float[] bounds)
path.getBounds(bounds)
# from java org.eclipse.swt.graphics.Rectangle(int x, int y, int width,int height)
rect = Rectangle(int(round(bounds[0])), 
                     int(round(bounds[1])),
                     int(round(bounds[2])),
                     int(round(bounds[3])))
4

3 に答える 3

4

リスト内包表記の使用は、最近ではより Pythonic と見なされています。

rounded = [int(round(x)) for x in bounds]

これにより、丸められた整数のリストが得られます。もちろん、「丸め」を使用する代わりに、これを境界に割り当てることができます

bounds = [int(round(x)) for x in bounds]

また、メーリング リストで Charlie Groves が指摘したように、すべては * 演算子で次のように展開できます。

rect = Rectangle(*[int(round(x)) for x in bounds])
于 2009-08-12T13:09:06.590 に答える
4

多分。まず、コードを少し減らすことができます。

bounds = map(lambda v: int(round(v)), bounds)

これにより、キャストの繰り返しが回避されます。次のステップは、配列を に変換するヘルパー メソッドを作成するRectangleことです。そのため、このコードを繰り返す必要はありません。

def toRectangle(bounds):
    bounds = map(lambda v: int(round(v)), bounds)
    return Rectangle(bounds[0], bounds[1], bounds[2], bounds[3])

それはあなたを残します:

rect = toRectangle(path.getBounds(zeroes(4, 'f'))

または、パスを直接受け入れるヘルパー関数を作成します。

または、パスをモンキー パッチすることもできます。

def helper(self):
    bounds = zeros(4, 'f')
    self.getBounds(bounds)
    bounds = map(lambda v: int(round(v)), bounds)
    return Rectangle(bounds[0], bounds[1], bounds[2], bounds[3])

org.eclipse.swt.graphics.Path.toRectangle = helper

rect = path.toRectangle()

これは少し間違っている可能性があることに注意してください。うまくいかない場合は、メソッドをオンザフライでクラスに追加する方法を参照しclassmethod()てください。new.instancemethod()

于 2009-08-12T07:48:43.103 に答える
2

また、配列を作成するためにゼロを使用する必要がないことも指摘しておく価値があります。適切な型に変換できるインスタンスを含む Python iterable で getBounds を呼び出すだけです。

path.getBounds([0, 0, 0, 0])
于 2009-08-15T20:20:28.153 に答える