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

Я пытаюсь определить функцию ( initdeque () ), которая принимает указатель на экземпляр класса deque.Вот что я попробовал:

from ctypes import *

class deque(Structure):
        pass

deque._fields_ = [("left",POINTER(node)),("right",POINTER(node))]

def initdeque(class deque *p):
        p.left=p.right=None

Но этот код выдает синтаксическую ошибку:

  def initdeque(class deque *p):
                      ^
  SyntaxError: invalid syntax

Какой правильный синтаксис?

Ответы [ 2 ]

6 голосов
/ 23 августа 2011

Нет способа указать тип переменных Python, поэтому объявление initdequeue должно просто сказать:

def initdeque(p):
  p.left = p.right = None

Вместо того, чтобы иметь случайную функцию, выполняющую инициализацию, вы должны рассмотреть использование initializer :

class deque(Structure):
  _fields_ = [("left",POINTER(node)), ("right",POINTER(node))]

  def __init__(self):
    self.left = self.right = None

Теперь, чтобы создать новый экземпляр, просто напишите

 p = dequeue()
0 голосов
/ 28 октября 2012

Python (как и Matlab) не имеет явного определения типа переменной. Когда переменная создана, компилятор определяет ее тип исходя из ее содержимого. Так что (если я не ошибаюсь) вы можете вызывать одну и ту же функцию с несколькими типами в качестве параметров и все еще работать. Например

def fun(p):
       return p=p*5

Таким образом, вы можете вызвать fun со строкой в ​​качестве параметра и вернуть вам строку, которая в 5 раз больше отправленной вами строки. Или вы можете вызвать его целым числом, и функция вернет вам результат умножения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...