Python 中的 Functor 是什么?
What is a Functor in Python?
我是 Python 的新手。有人可以解释仿函数值的来源吗? Functor = msg.functor,但没有对 functor 这个词的解释,我尝试用谷歌搜索它,但一无所获。另外 .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)
编辑:对不起,代码太多了,我已经尽可能地浏览了。
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)
我能理解的最多的是functor是msg的一个属性,而msg又是system input的argument,其中system input是一个事件通知。我是正确的还是完全走错了方向。
functor
是msg
对象的一个属性;如果没有看到该对象的定义,我们无法告诉您更多信息。同样,val
又是 msg
.
的属性
通过 Google 搜索我找到了文档,它可能会解释您的部分内容:
The Pedro 1.6 Reference Manual
关于 functor
我没有发现与此相关的问题(但没有花太多时间在这上面)。 Pedro 很可能被用作向某些(真实或虚拟)机器人发送命令的消息传递系统。机器人由具有某种结构的消息控制,包括仿函数,可能标识应执行的动作类型,以及定义该动作的参数的值。
因为 Python 允许传递 函数作为值 一个 Functor 基本上是一个对象,它是一个函数。请注意,在您 post 的代码中,您多次比较这是哪个函数。
在 cmd_type = functor.val
行中,您实际上将 cmd_type 归因于函数本身,稍后您将其进行比较以了解它到底是哪个函数。
if cmd_type == 'stop_':
是函数 stop()?
elif cmd_type in ['start_', 'mod_']:
是这些函数之一,start(), mod()?
等等...进一步阅读here
编辑:我发现 this 主题与理解仿函数的概念非常相关,虽然它没有引用 python 但 python 有很多函数式编程的特性。
基本的东西 - 味精和仿函数可能在这些地方:
- 在此文件中定义
- 在此文件顶部的导入语句导入的本地模块中,这将是应用程序目录结构中的 .py 文件
- 在别人安装的包中
.val - 这很可能是包含数据的属性。它不是我能找到的任何类型的 Python 关键字。我确定您认为它可能是 "value" 的缩写。它要么在它是 (functor, cmd.args[]) 的一部分的对象中定义,要么在它们导入并因此从中继承 val 的某些高级对象中定义。
我是 Python 的新手。有人可以解释仿函数值的来源吗? Functor = msg.functor,但没有对 functor 这个词的解释,我尝试用谷歌搜索它,但一无所获。另外 .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)
编辑:对不起,代码太多了,我已经尽可能地浏览了。
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)
我能理解的最多的是functor是msg的一个属性,而msg又是system input的argument,其中system input是一个事件通知。我是正确的还是完全走错了方向。
functor
是msg
对象的一个属性;如果没有看到该对象的定义,我们无法告诉您更多信息。同样,val
又是 msg
.
通过 Google 搜索我找到了文档,它可能会解释您的部分内容: The Pedro 1.6 Reference Manual
关于 functor
我没有发现与此相关的问题(但没有花太多时间在这上面)。 Pedro 很可能被用作向某些(真实或虚拟)机器人发送命令的消息传递系统。机器人由具有某种结构的消息控制,包括仿函数,可能标识应执行的动作类型,以及定义该动作的参数的值。
因为 Python 允许传递 函数作为值 一个 Functor 基本上是一个对象,它是一个函数。请注意,在您 post 的代码中,您多次比较这是哪个函数。
在 cmd_type = functor.val
行中,您实际上将 cmd_type 归因于函数本身,稍后您将其进行比较以了解它到底是哪个函数。
if cmd_type == 'stop_':
是函数 stop()?
elif cmd_type in ['start_', 'mod_']:
是这些函数之一,start(), mod()?
等等...进一步阅读here
编辑:我发现 this 主题与理解仿函数的概念非常相关,虽然它没有引用 python 但 python 有很多函数式编程的特性。
基本的东西 - 味精和仿函数可能在这些地方:
- 在此文件中定义
- 在此文件顶部的导入语句导入的本地模块中,这将是应用程序目录结构中的 .py 文件
- 在别人安装的包中
.val - 这很可能是包含数据的属性。它不是我能找到的任何类型的 Python 关键字。我确定您认为它可能是 "value" 的缩写。它要么在它是 (functor, cmd.args[]) 的一部分的对象中定义,要么在它们导入并因此从中继承 val 的某些高级对象中定义。