Python 3.x Python3:对函数进行链式调用

Python 3.x Python3:对函数进行链式调用,python-3.x,Python 3.x,这个问题可能毫无意义,只是对我来说很有趣,可能吗 在我的代码中,我有很多类似的检查和调用,比如: if self.command == self.CMD_HELP: help(self.id) if self.command == self.CMD_FIND: find(self.id) ... 我发现理论上可以这样做: self.COMMANDS = { 'help': help, 'find': find, ... } And execution:

这个问题可能毫无意义,只是对我来说很有趣,可能吗 在我的代码中,我有很多类似的检查和调用,比如:

if self.command == self.CMD_HELP:
    help(self.id)
if self.command == self.CMD_FIND:
    find(self.id)
...
我发现理论上可以这样做:

self.COMMANDS = {
    'help': help,
    'find': find,
    ...
}

And execution:

self.COMMANDS[command](self.id)
如果我调用一个函数就可以了。
但是,如果我需要调用类似于
first(second(arg))
的东西,那该怎么办呢

更新
对不起,我最初的描述似乎不太清楚。
所有这些都是关于当前实现的重构:

if command == MessageSettings.MSG_GLOBAL_HELP:
    notify_help(guid)
if command == MessageSettings.MSG_GLOBAL_DISCORD:
    sv_async.submit_fast(sv_discord.notify_discord_help(guid))
if command == MessageSettings.MSG_GLOBAL_FIND:
    sv_async.submit_fast(sv_discord.notify_found_discord_users(guid, param))
... a lot of other 'ifs'
同时,我必须支持进行比较的值列表:

class MessageSettings:
    MSG_GLOBAL_HELP = 'help'
    MSG_GLOBAL_DISCORD = 'discord'
    MSG_GLOBAL_FIND = 'find'
    ...
    MSG_VALUES = [
        MSG_GLOBAL_HELP,
        MSG_GLOBAL_DISCORD,
        MSG_GLOBAL_FIND,
        ...
    ]
在这种情况下,如果我添加新选项,我将不得不修改3个位置:类中的新字段,将其添加到数组中,添加比较和执行
if==value->function

由于函数可以接收不同数量的参数,我可以重写所有函数,将
数组[]
作为单个参数。 我想用一本带有
“key->function”的字典

我的问题是,我不明白在多个函数调用的情况下是否可以应用这种方法。 我也不知道,也不确定这种方法是否值得。
ps:在我的第三个案例中,有:

def submit_fast(task):
    future = asyncio.run_coroutine_threadsafe(task, loop_fast)

def notify_found_discord_users(will_replace_with_array):
    anything

如果你是说这样的话

def lower(x):
    return x.lower()

def upper(x):
    return x.upper()

a = "a string"
b = upper(lower(upper(a)))
当然。 内部函数的输出将链接为外部函数的输入(只要它们的参数匹配)。
它是任何编程语言的基础。

您可以使用lamda,如下所示:

def help (n):
  return "help " + n + " "

def find (n):
  return "find " + n + " "

COMMANDS = {
    'help': help,
    'find': find,
    'other' : (lambda x: help(x) + find(x))
}

print (COMMANDS['other']("Joe"))

您的意思是
self.COMMAND['foo'](self.COMMAND['bar'](self.id))
?您能否澄清
first(second(arg))
与示例代码中的
help
find
函数的关系?您是否在问如何使用键列表,如
[self.CMD\u HELP,self.CMD\u FIND]
,并希望组合这些函数?或者你想让合成的函数成为字典中的一个值(这样你就有了字典中的
self.CMD\u FIRST\u SECOND:something
)?有一种更简单的方法可以做到这一点
getattr(self,command)(self.id)
,但是command必须是一个方法的名称,很抱歉,我的第一个示例不清楚。补充说明。谢谢。我不知道python中的lambdas。总有新的东西。理论上,我可以将它们应用于我的需要。