2014-10-20 124 views
-2

我知道這是一個數據對象,但我是python的新手,我不明白user_output在做什麼。試圖理解這一切。什麼是這個對象?

def user_output(self,check): #data object 
    output = "" 
    #loop of all the info for __user_arr 
    for user in self.__user_arr: 
     if user.user_bot == str(check): 
      output += ''' 
    <div class='about'> 
     <h1>{user.user_name}</h1> 
     <h2>My favorite band is: {user.user_band} </h2> 
     <div class='business'> 
      <p>Why I want the tickets:<br /> {user.user_business}</p> 
     </div> 
    </div> 
      ''' 
      return output.format(**locals()) 
     else: #this will spit an error if the user do not answer the last question correctly. 
      output = '''<div class='error'><h2>Turns out you are a robot. No tickets for you </h2></div>''' 
      return output 
+0

未來,請在詢問代碼之前閱讀[this](http://meta.stackoverflow.com/questions/253894/how-to-handle-explain-how-this-code-dump-works-questions)再次拋出問題。 – MattDMo 2014-10-20 22:26:42

+0

對不起馬特我的錯誤。 – Surf3rDud3 2014-10-20 22:28:14

回答

0

它將產生用於每個用戶div塊與一些最喜歡的樂隊等,前提是,用戶標誌user_bot等於check(據我可以理解一種機器人支票)。如果用戶是機器人(不通過檢查),程序將生成Turns out you are a robot..塊。

0

這看起來像一個函數,而不是一個對象。它檢查你的用戶是否是機器人。它通過檢查你的用戶(對於每個用戶)是否具有他們的user_bot作爲輸入的字符串,可能是識別機器人的字符串。然後你寫一些我對輸出字符串一無所知的東西,可能會出售這張票。 此函數似乎只對第一個用戶這樣做,但因爲它返回第一個if else子句。

+0

好點。它會始終停止在第一個用戶身上 – agim 2014-10-20 22:28:16

0

user_output()似乎是某些類的方法。它使用「窮人的」誘惑設施來輸出HTML片段。

它似乎使用循環,for user in self.__user_arr:,但這是有點虛假。它使用這個構造從self.__user_arr中挑選出第一個項目。因爲它很快會在所有條件下從函數返回,所以它永遠不會返回到循環的頭部來檢查後續用戶(如果有的話)。

另請注意,self.__user_arr的雙下劃線前綴將其標記爲實現該對象的私有部分。一個非常私密的部分。單個下劃線通常表示「私密」。雙下劃線沒有超精確的定義,但是「非常私密」或「非常依賴於實現」是我的猜測。

如果該第一個用戶的user_bot屬性是一個等於check值(如字符串化)的字符串,則模板將被實例化。它首先通過設置一個字符串變量(output)來完成此操作,該變量嵌入了與strformat方法兼容的變量標記({a_variable})。調用output.format(**locals())進行字符串格式化操作,使用locals()(這是所有當前變量賦值的查閱字典,又名符號表)。 **locals()構造的意思是「使用這個字典(或類似字典)的對象,好像它是一組關鍵字參數。」其效果是將output中的子字符串如{user.user_band}直接內插到output字符串中。然後返回填入的字符串。

如果user.user_bot == str(check)測試失敗,則返回一個簡單的錯誤字符串。

無論哪種情況,都會返回一個字符串,並退出該方法。

唯一的其他情況值得考慮的是如果self.__user_arr集合中沒有用戶?然後循環將永遠不會運行,並且該方法隱式返回None