我想知道在以下行中实际发生了什么。原谅我,我是python语法的新手,谢谢你的帮助!
Handlers[type(dbw_msg)](dbw_msg)
其中 handlers = secondary:self.secondary_manage.handle.message
和dbw_msg = py_from_can(can_msg)
其中py_from可以定义为
def py_from_can(can_msg):
try:
if can_msg.ID in py_can_types:
return py_can_types[can_msg.ID].py_from_can(can_msg)
except NotImplementedError:
pass
return None
答案 0 :(得分:1)
所以,没有任何其他背景,我们只能说:
Handlers[type(dbw_msg)](dbw_msg)
Handlers
使用type(db_msg)
获取下标(即方括号)。我们只能假设这是某种映射(dict
),其中键是type
个对象。
最后,调用subcription操作get返回的值,即()
parens。因此,Handlers
是从type
个对象到可调用对象(例如函数)的映射。
所以,例如:
>>> handlers = {int: lambda x: x**2, str: str.upper}
>>> a = 8
>>> b = 'foo'
>>> handlers[type(a)](a)
64
>>> handlers[type(b)](b)
'FOO'
注意,str.upper
仅仅是普通字符串中的.upper
方法,即:
>>> "baz".upper() # note the call!
'BAZ'
与:
相同>>> str.upper("baz")
'BAZ'
而lambda
只是一种编写匿名函数的方法。它相当于:
def square(x):
return x**2