设计联合功能

时间:2012-02-24 18:58:23

标签: python

我有三个函数,每个函数都在内部调用它下面的函数:

  • GetBitrateOverHTTP
  • GetFilesizeOverHTTP
  • Is_ServerSupportHTTPRange

每个函数都使用HTTP请求。这意味着最后一个函数只使用一个HTTP请求,而第一个函数使用三个。

GetBitrateOverHTTP函数仅返回比特率。

这些函数可以自行运行,但现在我想获取特定网址的所有三个输出。

我想到了:

  1. 调用所有功能。问题是我将生成6个HTTP请求而不是3个。
  2. 更改函数的定义以返回其他变量 - 但它不符合函数的基本目的 - 返回它的返回值。
  3. 确定另一个不使用这些定义的函数,但是再次定义已经编码的东西似乎并不聪明。
  4. 任何帮助?

2 个答案:

答案 0 :(得分:0)

这些方面的东西:

class RemoteFile(...):

     ...

     def getInfo(self):
         resp = self._do_that_http_request(self.remotepath)
         return RemoteFileInfo(resp)


class RemoteFileInfo(...):

     def __init__(self, resp):
          self.bitrate = self._getbitrate(resp)
          self.filesize = self._getfilesize(resp)


     ...

等等

答案 1 :(得分:0)

我实现了一个缓存选项。我创建了一个虚拟文件并导入它。 然后我在每个函数的开头使用:

if hasattr(dummy, 'GetFileSize_cache'):
    if dummy.GetFileSize_cache.has_key(url):
        return dummy.GetFileSize_cache[url]
    else:
        dummy.GetFileSize_cache = {}

就在回归之前:

dummy.GetFileSize_cache[url] = file_size

问题解决了:))