这不正是装潢师的工作方式吗?

2024-04-26 05:59:49 发布

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

昨天,我们用python升级了slackclient模块,需要根据rtmapi的迁移指南修改一些代码。你知道吗

https://github.com/slackapi/python-slackclient/wiki/Migrating-to-2.x

这是我的密码。。。你知道吗

import slack

slack_token = os.environ['SLACK_BOT_TOKEN']

rtmclient = slack.RTMClient(token=slack_token)

@slack.RTMClient.run_on(event='message')
def parse_message(**payload):
    data = payload['data']
    channel_id = data['channel']
    print(data)
    print(channel_id)

rtmclient.start()

在此之前,我从未与Python decorator合作过。你知道吗

在阅读了decorators之后,我的理解是,如果我要调用函数parse_message,就会调用decoratorslack.RTMClient.run_on。你知道吗

此代码的作用似乎相反。你知道吗

当调用rtmclient.start()时,为什么/如何使用此代码?你知道吗


Tags: run代码tokenidmessagedataparseon
1条回答
网友
1楼 · 发布于 2024-04-26 05:59:49

不熟悉特定的API,但是

@slack.RTMClient.run_on(event='message')
def parse_message(**payload):
    ...

本质上与

def parse_message(**payload):
    ...

parse_message = slack.RTMClient.run_on(event='message')(parse_message)

在调用函数时不调用decorator,而是在声明函数时调用decorator。然后,它通常会定义并返回一个新函数,该函数将被调用,而不是原始函数,例如,使用附加的日志记录、记忆等。你知道吗

但是装饰程序也完全有可能只返回函数的原始版本,1,例如,将该函数注册为某些事件的回调。你知道吗

一个非常简单的例子:

my_callbacks = []
def register(f):
    my_callbacks.append(f)
    return f

@register
def foo():
    print("calling foo")


for f in my_callbacks:
    f()

1)如注释中所述,this decorator似乎甚至没有返回原始函数,而是返回None,这意味着函数在修饰后将不再可以直接调用,只能通过回调。你知道吗

相关问题 更多 >

    热门问题