代码之家  ›  专栏  ›  技术社区  ›  avacariu

将实例作为函数参数传递

  •  2
  • avacariu  · 技术社区  · 14 年前

    我写了一个很好的小应用程序,可以获取雅虎的天气信息并将其发布到Twitter上。它工作得完美无瑕,现在我想将代码重新排列成不同的命名文件,这样更合理。就在那时我遇到了一些问题。

    以前,我有一个 Class 在里面 libtweather.py . 那是我的 account . 它允许我这么做 accountName.parseFeed() 我会得到分析过的雅虎天气作为输出。 ( __ini__ 以天气URL、Twitter用户名和密码为参数)

    这是从创建 等级 这样地:
    exec '%s = lw.twitterWeather("%s", "%s", "%s")' % (item[0], item[1], item[2], item[3]) 它将所有帐户名的列表保存在一个列表中,该列表作为参数传递给其他函数。

    另一个功能 getWeather 通过以下方式获得天气:

    def getWeather(accountList): #account names passed as a list of strings
        for item in accountList:
            print item, ': ',
            item = eval(item)       
            print item.parseFeed(), '\n
    

    我现在决定把 天气预报 函数与 等级 但这条线 item = eval(item) 因为该文件中没有创建实例,所以给我带来了问题。它们都在主脚本中。

    现在我的问题是:有什么方法可以把这些实例作为函数的参数?或者我必须把这个函数放到 等级 ?即使我这样做了,我仍然需要 item.parseFeed() 对于列表中的多个项目,因此我仍然需要 项目=评估(项目) 不是吗?

    事先谢谢。我的应用程序有点需要在这里全部发布,但是如果需要更好地理解的话,我会发布更多的代码。

    更新: 我最终运行了我的 LiPtWeiTy.Py 在导入实例时创建实例,以便其内部的函数可以访问它们(在脚本底部添加了实例生成代码)。我相信有更好的方法,但它目前对我有效,我同意。

    1 回复  |  直到 14 年前
        1
  •  5
  •   habnabit dwc    14 年前

    您应该使用显式dict来存储这些项。 eval , exec , globals , locals vars 都是非常愚蠢的方式来做这件事。请记住,从python的禅中:“显式优于隐式。”

    feeds = {}
    for item in whatever:
        feeds[item[0]] = lw.twitterWeather(*item[1:])
    
    def getWeather(feeds, accountList):
        for item in accountList:
            print '%s: %s' % (item, feeds[item].parseFeed())