这个python语法试图做什么?

时间:2017-07-27 21:59:43

标签: python python-2.7

我想知道在以下行中实际发生了什么。原谅我,我是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

1 个答案:

答案 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