Указатели Python или общий доступ к очереди

1

Прежде чем я использовал C, теперь я хочу изучить Python.

У меня вопрос, у меня есть два класса, как я могу передать адрес переменной, когда я вызываю конструктор, потому что я хочу разделить очередь между этими двумя классами (каждый класс имеет поток). Или у него есть другие возможности для обмена очередью между двумя классами.

  • 2
    Python имеет модуль очереди, который является потокобезопасным
  • 1
    Вы читали учебник ? Он охватывает все основы довольно хорошо.
Теги:

4 ответа

3
Лучший ответ

Python уже использует ссылочную (в отличие от значения) семантику:

a = [1, 2, 3]
b = a
a.append(4)
print b # => [1, 2, 3, 4]

Вам не нужно делать какую-либо дополнительную работу, чтобы получить то, что вы хотите.

  • 4
    Я бы предпочел, чтобы Python имел ссылочную семантику, а не Python использует внутренние указатели - последний зависит от реализации.
  • 0
    Справедливо, @ Space_C0wb0y, и именно поэтому у вас есть возможность редактировать мой ответ. :)
Показать ещё 1 комментарий
1

Однако, если вы говорите о потоках, это еще одна история. Если говорить конкретно о multiprocessing Queue протоколе между потоками связи, которые могут копировать данные через. Лучшим вариантом может быть протокол обмена совместно используемой памятью Manager, описанный в http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes

  • 1
    Первые два предложения неверны. В Python все является объектом, и все передается точно так же.
  • 0
    @ kindall спасибо, вы, похоже, правы. Я только что подтвердил это, выполнив z=(1+99999) и assert z is (lambda x:x)(z) . Я удалил неправильные заявления.
Показать ещё 2 комментария
0

Все это объект. В Python не нужно беспокоиться о "указателях".

foo = []

def bar(val):
  val.append(42)

def baz(val):
  val.append('Hello, world!')

bar(foo)
print foo
baz(foo)
print foo
0

Не уверен, что это ваш вопрос, но не можете ли вы просто передать его как параметр конструктору?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню