2013-02-11 96 views
0
# -*- coding: utf-8 -*- 
import os 
import fbconsole 
here = os.path.dirname(os.path.abspath(__file__)) 


def fbfeed(): 
    fbconsole.APP_ID = '588914247790498' 
    fbconsole.AUTH_SCOPE = ['publish_stream', 'publish_checkins', 'read_stream', 'offline_access'] 
    fbconsole.authenticate() 
    newsfeed = fbconsole.get('/me/home') 
    newsfeedData = newsfeed["data"] 
    for status in newsfeedData: 
     fromn = [status['from']['name']] 
     name = [status.get('name', None)] 
     description = [status.get('description', None)] 
     if description == name is None: 
      return fromn 
     elif description is None: 
      return fromn.extend(name) 
     elif name is None: 
      return fromn.extend(description) 
     else: 
      return fromn + name + description 

我的代码只返回一个字符串,但是当我使用打印,而不是回报 - 它打印所有结果的。我如何返回相同的结果,如print如何返回的所有字符串

+1

改变你返回的收益,那么你可以''为f在饲料():'' – sotapme 2013-02-11 18:40:15

回答

2

当你使用return时,它会退出函数,并且不会像循环一样循环遍历循环。尝试收益。

+0

好吧,它的工作原理,我该如何定义这个结果给变量?我想将它发送到mako模板。 – 2013-02-11 19:07:21

+1

当你使用yield语句时,它将函数转换为一个生成器,它可以像列表一样使用。将它转换为列表最简单的方法就是说x = list(fbfeed()) – Hoopdady 2013-02-11 19:31:20

+0

它显示我输出的结果如同'[u'\ u0406 \ u0440 \ u0438 \ u043d \ u0430 \ u0421 \ u0435 \ u0445',无,u'Change Ur模板到R3D在这里 - > http://bit.ly/14NYfaJ?477259&cid=theme']'如何解决它? – 2013-02-11 22:51:36

1

问题是,当你的循环碰到第一个return语句时,函数将退出并且循环不会继续。使用print将允许循环继续。

有两种选择是在开始循环之前创建一个列表,将循环中的状态添加到列表中,然后在循环之后返回列表。

使用yield关键字代替return将允许其他函数遍历结果。有关yield关键字的更多详细信息可以在此处找到:What does the "yield" keyword do in Python?(在实际文档中加上:http://docs.python.org/2.7/reference/expressions.html?highlight=yield#yield-expressions)。