2016-08-26 2 views
0

문자열을 선택하고 현재 필드를 업데이트하는 스크립트를 만들려고하지만 어떤 이유로 내 changerandom 함수를 호출 할 때 코드가 마지막 값을 업데이트하지 않습니다. Greeting 클래스입니다.OrderedDict 클래스에서 임의의 필드 선택 함수를 파이썬 업데이트

...[snip]... 
class Greeting(Packet): 
    fields = OrderedDict([ 
     ("Morning",  "Hi"), 
     ("Afternoon", "Good Afternoon!"), 
     ("Evening",  "Good Evening!"), 
    ]) 

    def change(self): 
     self.fields["Morning"] = "Good morning!" 

    def changerandom(self, n = 1): 
     function=[ 
        {self.fields["Morning"]: "Hello!"}, 
        {self.fields["Morning"]: "Bonjorno!"}, 
        {self.fields["Morning"]: "Hola!"}, 
       ] 
     result = {} 
     for i in range(n): 
      result.update(choice(function)) 
      print "Updated string:",result 
      return result 
text = Greeting() 
print text 
text.change() 
print text 
text.changerandom() 
print text 

내 코드 반환 다음

가 반환해야하지만
Hi 
Good morning! 
Updated string: {'Good morning!': 'Hola!'} 
Good morning! 

:

Hi 
Good morning! 
Hola! 

내가 여기에 누락 모르겠어요, 내가 볼 수 없습니다 마지막 필드를 업데이트 할 수없는 이유는 무엇입니까? 도움이 될 것입니다.

답변

0

어디서나 할당하지 않고 결과가 return 인 경우 문제가 발생합니다.

은 또한 오히려 보다 fields을 사용합니다. 그래서, 당신의 코드는 우리가 self.fields.update을 사용하고

def changerandom(self, n = 1): 
     function=[ 
        {"Morning": "Hello!"}, 
        {"Morning": "Bonjorno!"}, 
        {"Morning": "Hola!"}, 
       ] 

     for i in range(n): 
      result = choice(function) 
      self.fields.update(result) 
      print "Updated string:",result 
      return result 

주 같은 것을해야하고, 우리는 무엇을 보내고 더 이상 return 것 없습니다.

일반적으로, 반환에 뭔가, 또는 변경 뭔가, 그러나 결코 모두 당신의 기능 및 방법에 대한 좋은 연습입니다.

+0

아 맞다! 트릭을 가져 주셔서 감사합니다! – user1473508

관련 문제