VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 32
声望: 0

如图所示

C:\veighna_studio\Lib\site-packages\vnpy_ctastrategy\template.py里的

description

分析:
在Python中,not callback 这个表达式并不是检查 callback 是否是一个布尔值,而是检查 callback 的“真值”(truthy value)。在Python中,许多对象都可以被解释为布尔上下文中的真值或假值。例如,None、空列表 []、空字典 {} 和数字 0 等都是假值(falsy values),而大多数其他对象(如非零数字、非空列表、非空字符串等)都是真值。

当你说 not callback,你是在检查 callback 是否为假值。如果 callback 是 None 或者其他假值,那么 not callback 将评估为 True。如果 callback 是真值(比如一个函数对象),那么 not callback 将评估为 False。

在 load_bar 函数的上下文中,callback 应该是一个可调用的对象(通常是一个函数或方法),而不是一个布尔值。函数的默认参数通常不会设置为布尔值,除非该函数确实需要一个布尔标志来控制其行为。在这个例子中,callback 的默认值是 None,这意味着如果没有显式传递一个回调函数,那么 callback 将默认为 None。

因此,if not callback: 这行代码检查的是 callback 是否为 None 或其他假值。如果是,那么函数将使用 self.on_bar 作为默认的回调函数。如果不是(即 callback 是一个可调用的对象),那么函数将使用传入的 callback。

总结一下,callback 不是一个布尔值,而是一个可能为 None 或其他可调用的对象的参数。not callback 用于检查 callback 是否为假值(通常是 None),以便决定是否使用默认的回调函数。

Member
avatar
加入于:
帖子: 4887
声望: 294

底下调用的是self.cta_engine的load_bar函数,不是CtaTemplate实例的

Member
avatar
加入于:
帖子: 32
声望: 0

xiaohe wrote:

底下调用的是self.cta_engine的load_bar函数,不是CtaTemplate实例的

嗯 有点明白。

突然又想到一个问题,想问一下 里面的callback(bar) 相当于 on_bar(bar)吗? 如果不是,callback()又相当于什么呢?

Member
avatar
加入于:
帖子: 4887
声望: 294

是的

Member
avatar
加入于:
帖子: 32
声望: 0

更新def load_bar()流程图
description

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】