V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
qile11
V2EX  ›  Python

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

  •  
  •   qile11 · 2018-10-22 11:32:30 +08:00 · 1680 次点击
    这是一个创建于 2247 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    # -*- 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())
    
    
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1149 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:41 · PVG 07:41 · LAX 15:41 · JFK 18:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.