什么是Python中的函子?

2024-04-28 18:12:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手。有人能解释函子值的来源吗。函子=函数函数,但是没有解释函子这个词,我试着在谷歌上搜索,却一无所获。另外,.val关键字在任何地方都没有解释,我可能有点模糊,但我找不到任何例子。

def process_action(self, msg, sender):  
    assert msg.get_type() == pedroclient.PObject.structtype
    functor = msg.functor
    assert functor.get_type() == pedroclient.PObject.atomtype
    cmd_type = functor.val
    cmd = msg.args[0]
    if cmd_type == 'stop_':
        assert cmd.get_type() == pedroclient.PObject.structtype
        cmd_functor = cmd.functor.val
        #if cmd_functor in ['pickup', 'putdown']:
        self.stop_arm(cmd.args[0].val)
        #else:
        #    self.stop_arm(cmd.args[0].val)

    elif cmd_type in ['start_', 'mod_']:
        self.start_animate()
        assert cmd.get_type() == pedroclient.PObject.structtype
        cmd_functor = cmd.functor.val
        if cmd_functor == 'pickup':
            self.pickup(cmd.args[0].val, cmd.args[1].val, sender)
        elif cmd_functor == 'putdown':
            if cmd.args[1].get_type() == pedroclient.PObject.inttype:
                self.putdown_on_block(cmd.args[0].val, cmd.args[1].val, 
                                      sender)
            else:
                self.putdown_on_table(cmd.args[0].val, cmd.args[1].val, 
                                      sender)
        elif cmd_functor == 'go_home':
             self.go_home(cmd.args[0].val)

编辑:对不起,还有很多代码,我已经尽我所能略过了。

^{pr2}$

我能理解的最好的是函子是msg的一个属性,msg又是系统输入的参数,其中系统输入是一个事件通知。我是正确的还是完全走错了方向。


Tags: selfcmdgetiftypeargsmsgval
3条回答

通过谷歌搜索,我找到了一些文档,这些文档可能可以解释您: The Pedro 1.6 Reference Manual

关于functor我没有找到一个关于这个的not about(但是没有花太多时间在上面)。很有可能,Pedro被用作向某种(真实或虚拟)机器人发送命令的消息传递系统。机器人是由信息控制的,这些信息具有某种结构,包括函子,它可能是应该执行的动作类型的标识,以及定义动作参数的值。在

基本内容-msg&functor可能在以下位置:

  • 在此文件中定义
  • 在由文件顶部的import语句导入的本地模块中,这将是应用程序目录结构中的一个.py文件
  • 在其他人安装的软件包中

.val-这很可能是包含数据的属性。我找不到任何类型的Python关键字。我相信你认为它可能是“价值”的缩写。它要么定义在它所属的对象中(函子,命令行参数[]),或者在某个高级对象中导入并从中继承val。在

由于Python允许函数作为值传递,函子基本上是一个对象,它是一个函数。请注意,在您发布的代码中,您会多次比较这是哪个函数。在

cmd_type = functor.val行中,您实际上将其归因于cmd_,然后键入该函数本身,然后对其进行比较,以确定它到底是哪个函数。在

if cmd_type == 'stop_':
函数是stop()吗?在

elif cmd_type in ['start_', 'mod_']:
是这些函数之一,start(),mod()?在

等等。。。进一步阅读here

Edit:我发现this主题与理解函子的概念非常相关,尽管它没有引用python,但是python有很多函数式编程特性。在

相关问题 更多 >