как получить доступ к списку в другой функции - PullRequest
0 голосов
/ 02 августа 2010

Я сделал класс, в котором есть 3 функции.

  1. def maxvalue
  2. минимальное значение
  3. def getAction

В функции def maxvalue я составил список действий. Я хочу, чтобы этот список был доступен в функции def getaction, чтобы я мог перевернуть список и затем извлечь из него первую запись. Как я могу это сделать ??

 def getAction(self,gamestate):
      bestaction.reverse()
      return bestaction[0]




 def maxvalue(gameState, depth):

    actions = gameState.getLegalActions(0);
    v = -9999
    bestaction = []
    for action in actions:
      marks = minvalue(gameState.generateSuccessor(0, action), depth, 1)
      if(v < marks):
       v = marks
       bestaction.append(action)
    return v

Это дает мне ошибку ..... "глобальное имя бестакта не определено"

Ответы [ 3 ]

1 голос
/ 02 августа 2010

Хорошая идея размещать реальный код - это помогает увидеть, что происходит.

С учетом вышесказанного вы, вероятно, захотите что-то вроде этого:

class MyClass(object):
    def max_value(self):
        # assigning your list like this will make it accessible 
        # from other methods in the class
        self.list_in_max_value = ["A", "B", "C"]

    def get_action(self):
        # here, we're doing something with the list
        self.list_in_max_value.reverse()
        return self.list_in_max_value[0]

>>> my_class = MyClass()
>>> my_class.max_value()
>>> my_class.get_action()
"C"

Возможно, вы захотите прочитать руководство по классу python .

1 голос
/ 02 августа 2010

Либо определите список как атрибут класса, либо как атрибут экземпляра, тогда все методы смогут получить к нему доступ

Если вы хотите опубликовать свой класс, вам будет проще показать, что я имею в виду

Вот пример, делающий его атрибутом класса

class Foo(object):
    list_of_actions = ['action1', 'action2']
    def max_value(self):
        print self.list_of_actions
    def min_value(self):
        print self.list_of_actions        
    def get_action(self):
        list_of_actions = self.list_of_actions[-2::-1]
        print list_of_actions

А вот в качестве атрибута экземпляра

class Foo(object):
    def __init__(self):
        self.list_of_actions = ['action1', 'action2']
    def max_value(self):
        print self.list_of_actions
    def min_value(self):
        print self.list_of_actions        
    def get_action(self):
        list_of_actions = self.list_of_actions[-2::-1]
        print list_of_actions

Редактировать с тех пор, как вы отправили код, вот как можно решить вашу проблему

def getAction(self,gamestate):
    self.bestaction.reverse()
    return bestaction[0]

def maxvalue(gameState, depth):
    actions = gameState.getLegalActions(0);
    v = -9999
    self.bestaction = []
    for action in actions:
        marks = minvalue(gameState.generateSuccessor(0, action), depth, 1)
        if v < marks:
            v = marks
        self.bestaction.append(action)
    return
0 голосов
/ 02 августа 2010

Вы можете использовать побочный эффект для создания атрибута класса ..

class Example(object):
  def maxvalue(self, items)
    self.items = items
    return max(item for item in items)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...