2013-12-16 3 views
0

Это концептуальная проблема, мне нужно создать несколько «узлов» для моделирования сети. Именование - проблема. Мне нужен метод автогенерации имен для экземпляров (любой метод, который позволяет мне отслеживать и ссылаться на узлы после создания)динамическое именование для создания экземпляра

, чтобы дать лучшее представление о том, что мне нужно, вот что цикла будет выглядеть с хэштагами, зашифрованными в том месте, где проблема. x и y будут определены в родительской функции.

for n in range(1000): 
     #n, but somehow converted into the name of the dict# = { 
      'address':n, 
      'resistance':x, 
      'special':[], 
      'parent':y, 
      'children':[], 
      'adjnodes':[] 
    } 

Извините за отсутствие необходимости. Я искал высоко и низко для ответа на это, так что, если это очевидно, я неправильно использую жаргон или что-то еще; в таком случае, пожалуйста, дайте мне знать, что использовать lingo, и я возьму свою шляпу и буду в пути. Не будучи саркастичным, просто предпочитайте, чтобы его учили жестко, когда это необходимо. Благодарю.

+0

Я не есть много, чтобы добавить, кроме личного анекдота - Я ДЕЛАТЬ ЭТО. Не эта точная проблема, но мне пришлось опросить ~ 100 машин и вытащить информацию о размере файла, когда мы обнаружили, что процесс очистки работает неправильно. Я использовал имя файлов, которые я проверял, как каждую переменную, и кодировку monkeywrenching и hackjob, которую я должен был сделать, чтобы этот метод работал IMMENSE. Я больше не буду поддерживать этот код - если ему нужны серьезные обновления, я напишу его с нуля, зная, что я знаю сейчас. Следуйте советам ваших ответчиков: ХРАНЕНИЕ ДАННЫХ ИЗ ВАШИХ ПЕРЕМЕН. –

+0

И вот почему PHP превосходит python: http://www.php.net/manual/en/language.variables.variable.php (шучу, нисходящий для троллинга не для невежественности пожалуйста :-) – vincent

+0

@ vincent: Nah, Tcl превосходит оба. 'eval' - это единственный способ сделать все, поэтому вам не нужно помнить ничего необычного, эффективного или безопасного, потому что такого не существует. :) – abarnert

ответ

4

Похоже, вы пытаетесь создать их как кучу отдельных переменных, а затем сохраните имя переменной в поле address каждого из них.

Не делайте этого. См. Keep data out of your variable names и Why you don't want to dynamically create variables для объяснения причин. Но короткая версия заключается в том, что попытка сделать это - единственная причина, по которой у вас возникла проблема в первую очередь.

Почему бы не создать только один list всех узлов? Тогда ваш address может быть просто индексом в этом списке. Например:

nodes = [] 
for n in range(1000): 
    nodes.append({ 
     'address':n, 
     'resistance':x, 
     'special':[], 
     'parent':y, 
     'children':[], 
     'adjnodes':[] 
    }) 

Или, если вы планируете быть добавление и удаление узлов, как вы идете вперед, поэтому индексы список не будет оставаться последовательным, просто использовать dict:

nodes = {} 
for n in range(1000): 
    nodes[n] = { 
     'address':n, 
     'resistance':x, 
     'special':[], 
     'parent':y, 
     'children':[], 
     'adjnodes':[] 
    } 
+0

собирался спросить об этом, но нашел его в другом месте. Интересно было об использовании функций и классов, относящихся к узлам. У этого парня был супер гладкий ответ http: // stackoverflow.com/questions/1208322/dictionary-with-classes shapes = {'1': Square, '2': Circle, '3': Triangle} # просто имена классов в dict x = shapes [raw_input (raw_input))]() # получить класс из dict, затем вызвать его для создания экземпляра формы. – user3100457

1

Если n имеет смысла, вы можете поместить каждый из этих dict с в другую dict с n в качестве ключа.

Если n не имеет смысла, просто добавьте эти dict s в list.

В любом случае, сохраните свои данные из ваших имен переменных.

Смежные вопросы