python - 这是否是惰性评估的合理用例?

标签 python youtube-api

我有一个名为 Video 的 Python 类,它代表 YouTube 视频。给定 YouTube 视频的 ID,Video 返回代表该视频的对象。但是,首次创建 Video 对象时,不会查询 YouTube。仅当要求提供需要 YouTube 信息的属性时才会查询 YouTube。其工作原理如下:

>>> from video import Video
>>> video = Video('B11msns6wPU') 
# 'B11msns6wPU' is the ID of a video
>>> video
Video(youtube_id="B11msns6wPU")
### As of now, no call to YouTube's API has been made
### Next, I ask for the title attribute. The object queries YouTube's API to get 
### this information. In doing so, the object is completely initialized
>>> video.title
u'Badly Drawn Boy - Disillusion (directed by Garth Jennings)'
>>> video.duration
u'275'
# no query was made to the API because the object has been already been initialized

我不确定这在技术上是否是“惰性评估”,但它的味道是相似的。在第一次调用属性之前,视频对象不会被初始化。我想知道这项技术是否值得实现。显然,这使我的代码变得更加复杂。你有什么想法?

最佳答案

这是一种一般性的判断,而不是一个硬性的决定。

如果惰性对象(Video 类实例)是您的应用程序的核心,那么在执行其他操作之前完全初始化它可能是有意义的;如果您的应用没有数据就毫无用处,请先获取数据。

但是,如果您的应用可能有数百或数千个这样的 Video 实例,并且其中大多数都不会被使用,那么在您初始化所有这些实例时让用户等待是没有意义的。在这种情况下,将初始化推迟到真正需要的时候是很有意义的。例如,如果您将显示“缩略图墙”显示,您可能需要每个视频和标题的缩略图,但除非用户单击缩略图,否则您可能不需要其他任何内容。

我确实喜欢一般方法,即使用该对象的代码不需要知道或关心该对象是否已预先初始化。

关于python - 这是否是惰性评估的合理用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11003370/

相关文章:

youtube - 通过WiFi在YouTube上自动播放YouTube

python - sklearn.* 模块在 0.22 版中已弃用,并将在 0.24 版中删除

python - 过滤 Python 字典的非蛮力方法是什么?

php - 如何使用 Laravel 的 command fire 方法运行 python 脚本?

YouTube API : How to specify an API callback after an uploaded video has finished encoding?

java - Eclipse luna中maven项目构建成功后如何运行

python - 找不到在 Django 中呈现页面的代码

python - Pandas :将时间间隔整数转换为时间

javascript - 如何使用 moment.js 格式化 YouTube API 视频的持续时间

Youtube Data Api 在 1000 个结果后停止