Как передать значения по ref в Python? - PullRequest
3 голосов
/ 23 февраля 2009

В основном я использую C ++ API приложения, но нет ссылки на его доступ к Python. Одна переменная передается по ссылке, например так:

GetPoint ( Point  &p, Object obj )

так как я могу перевести на Python? Есть ли пропуск по символу ref?

Ответы [ 5 ]

4 голосов
/ 23 февраля 2009

В Python отсутствует символ перехода по ссылке.

Просто измените переданную точку, ваши изменения будут видны из вызывающей функции.

>>> def change(obj):
...     obj.x = 10
...
>>> class Point(object): x,y = 0,0
...
>>> p = Point()
>>> p.x
0
>>> change(p)
>>> p.x
10

...

Так что я должен передать это как: GetPoint (p, obj)?

Да, хотя Iraimbilanja имеет хорошее замечание. Привязки могли изменить вызов, чтобы вернуть точку, а не использовать параметр out.

3 голосов
/ 23 февраля 2009

Вероятно, ваши привязки Python превратили эту подпись в:

Point GetPoint(Object obj)

или даже:

Point Object::GetPoint()

Так что посмотрите документацию или источники привязок.

2 голосов
/ 23 февраля 2009

Я почти уверен, что Python передает значение ссылки в переменную. Эта статья , вероятно, может объяснить это лучше, чем я.

1 голос
/ 23 февраля 2009

В python нет ссылки на символ - правильная вещь зависит от вашего API. Вопрос, который нужно задать себе: кто владеет объектом, переданным из C ++ в python? Иногда проще всего скопировать объект в объект python, но это не всегда может быть лучшим решением.

Вас может заинтересовать boost.python http://www.boost.org/doc/libs/1_38_0/libs/python/doc/index.html

1 голос
/ 23 февраля 2009

Объекты всегда передаются как ссылки в Python. Так что завертывание в объект производит похожий эффект.

...