2014-10-20 126 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