首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python中的函子是什么?

Python中的函子是什么?
EN

Stack Overflow用户
提问于 2016-03-13 19:12:51
回答 4查看 2.9K关注 0票数 0

我是Python新手。有人能解释函子值从哪里来吗。函子= msg.functor,但是对函子这个词没有解释,我试过搜索它,结果什么都没有。另外,.val关键字在任何地方都没有解释,我可能很模糊,但我找不到任何例子。

代码语言:javascript
运行
复制
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)

编辑:对不起有更多的代码,我已经尽可能多地浏览它。

代码语言:javascript
运行
复制
def process_msg(self, term):
    msg = term.args[2]
    sender_process = term.args[1].args[0].args[1].val
    robotID = int(sender_process[-1])-1
    #print msg
    if str(msg) == "initialise_":
        robotID = int(sender_process[-1])-1

def data_cb(self, event):
    self.env.process_msg(event.notification)

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-03-13 20:10:28

基本内容- msg和函子可能位于以下位置:

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

.val --这很可能是一个包含数据的属性。它不是我能找到的任何类型的Python关键字。我相信你认为它可能是“价值”的缩写。它要么是在它是其一部分的对象(函子,cmd.args[])中定义的,要么是在它们导入并由此继承val的高级对象中定义的。

票数 1
EN

Stack Overflow用户

发布于 2016-03-13 19:26:16

通过Google搜索,我找到了一些文档,这些文档可能会解释你的部分内容:Pedro 1.6参考手册

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

票数 1
EN

Stack Overflow用户

发布于 2016-03-13 19:27:54

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

在行cmd_type = functor.val上,您实际上将函数本身归因于cmd_type,然后比较它,以知道它到底是哪个函数。

if cmd_type == 'stop_':

函数stop()是吗?

elif cmd_type in ['start_', 'mod_']:

这些函数之一是start(),mod()吗?

等等..。再读这里

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35974563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档