Python 如何通过关键字调用函数并传参,附参考代码

2018-10-22 11:32:30 +08:00
 qile11

参考一个微信开发的代码,通过关键字关联到函数去执行,我运行后 刚刚测试居然好使,发出来大家讨论下有啥优化的地方! 代码如下

# -*- coding: utf-8 -*-
# python3.6
# 小程序获取二维码示例
from bottle import response,route,run,template,request,redirect
from bottle import get, post# or route
import urllib
import urllib.parse as up
import urllib.request as ur
import xml.etree.ElementTree as ET

import json,time,os,re
import hashlib
import requests
# from wx_api import *
# from wx_config import *

from wechatpy import parse_message
msg_type_resp = {}

class message():
    type="text"
    content="取消"
def set_msg_type(msg_type):
    """
    储存微信消息类型所对应函数(方法)的装饰器
    """
    def decorator(func):
        msg_type_resp[msg_type] = func
        return func
    return decorator


@set_msg_type('text')
def text_resp():
    """文本类型回复"""
    # 默认回复微信消息
    response = 'success'
    # 替换全角空格为半角空格
    message.content = message.content.replace(u' ', ' ')
    # 清除行首空格
    message.content = message.content.lstrip()
    # 指令列表
    commands = {
        u'取消': cancel_command,
        u'^\?|^?': all_command
    }
    # 匹配指令
    command_match = False
    for key_word in commands:
        if re.match(key_word, message.content):
            # 指令匹配后,设置默认状态
            response = commands[key_word]()
            command_match = True
            break
    if not command_match:
        # 匹配状态
        state = get_user_state(openid)
        # 关键词、状态都不匹配,缺省回复
        if state == 'default' or not state:
            response = command_not_found()
        else:
            response = state_commands[state]()
    return response
def cancel_command():
    print('cancel_command')
def all_command():
    print('all_command')
def index():
    try:
        get_resp_func = msg_type_resp[message.type]
        response = get_resp_func()
    except KeyError:
        # 默认回复微信消息
        response = 'success'
        # 储存微信消息类型所对应函数(方法)的字典
print(index())

1654 次点击
所在节点    Python
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/499766

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX