2012-08-07 95 views
1

我一直在學習有關類,我有我的代碼工作,但我只是想知道返回的值去哪裏?當一個類中的函數返回一個值時,它返回到哪裏?

代碼:

from sys import exit 
from random import randint 

class Game(object): 

    def __init__(self, start): 
     self.pie = [ 'pie test'] 

     self.start = start 

    def play(self): 
     next_room_name = self.start 
     while True: 
      print "\n--------" 
      room = getattr(self, next_room_name) 
      next_room_name = room() 

    def rooom(self): 
     print "Test worked. good job" 
     return "piez" 

    def piez(self): 
     print "pie room" 
     exit(1) 


a_game = Game("rooom") 
a_game.play() 

例如,在上面的代碼我rooom()返回 「piez」,現在帶我去piez(個體經營)功能。但是,回報價值將帶到哪裏?

它是否返回「piez」之類外,並用新值重新進入類?它是否將字符串「piez」返回到init(self,start)?我只是將值返回到前一個函數,play(self)?

除此之外,一切工作正常,但我就是不明白,我怎麼到達piez(個體經營)功能,只需在前面的函數返回「piez」。在過去,我只是通過用()輸入名稱來繞過函數,但這樣我就返回一個字符串,不知道我是如何跳轉的。

這裏是我的觀察:

1)實例化類遊戲( 「Rooom」),以a_game

2)從a_game我們所說的play()函數

3)「Rooom 「發送到init和分配給self.start

4.)播放(個體)啓動和使用intialized功能self.start並設置到next_room_name

5.)迴路ST藝術。下一個功能是從next_room_name抓住並分配到房間

6.)next_room_name被分配到室()。突然跳到rooom(個體經營)

7)我們到達rooom(個體經營),並返回 「piez」

8)? Piez某處返回......我們現在正處於piez(個體經營)

有人可以幫助我彌補差距?這讓我瘋狂。我希望我有道理......我現在正在密切地試圖理解這一個小時,甚至在分解之後,我似乎誤解了一些東西。

+0

類方法就像常規函數一樣。請在學習課程之前瞭解功能如何工作。 – Antimony 2012-08-07 01:21:55

+0

@Antimony我用普通功能做得很好。我只需鍵入他們的名字function(),然後它就會在那裏。我不明白這是相同的:\ – Danielle 2012-08-07 01:27:01

+0

常規函數也可以返回值。當他們這樣做時,可以使用類似'a = function()'的語法。如果你明白這一點,你會理解這段代碼。 – 2012-08-07 01:27:37

回答

3

你有輕微的困惑在這裏:

5)循環開始。下一個功能是從next_room_name抓住並分配到房間

6.)next_room_name被分配到室()。突然跳轉到rooom(self)

如果等號存在,任何語句的返回值都分配給等號的左側。

當你寫

x = hello()

這意味着:

「打電話問候,並存儲在X任何返回值」

所以應該

「的room()調用的函數的返回值存儲在0123中「

希望這會爲您澄清它。

+0

謝謝!這很有道理。我一定錯過了那部分功能。那麼,返回值總是會被​​調用到什麼地方呢?真棒。 – Danielle 2012-08-07 01:39:36

+0

是的,最後它總是「返回」(得到它?)給誰調用它,然後調用者的下一行被執行。 – 2012-08-07 01:40:50

+0

@Danielle你可以將返回值看作是*替換*就地調用的函數,變量被它們的值替換的方式也是一樣 - 也就是第一次做:'room = getattr(self,next_room_name)'變成'room = getattr(self,'rooom')'變成'self.rooom'(因爲'getattr'返回);所以'next_room_name = room()'變成'next_room_name = self.rooom()'變成'next_room_name ='piez''。 – lvc 2012-08-07 01:44:22

相關問題