【问题标题】:How do I pass parameters into functions using other functions?如何使用其他函数将参数传递给函数?
【发布时间】:2014-06-04 06:04:15
【问题描述】:

我不断收到错误:“unhashable type: list” for line (routing_table[key][0] = [[params], func]。我正在尝试将 url 和函数传递给路由函数。这条路由函数应该使用正则表达式为其他函数挑选参数。最终目标是读入“/page/<page_id>,然后挑选<page_id>并将其替换为用户输入。然后将传递用户输入进入函数。我不明白为什么这不起作用。

import re

routing_table = {}

def route(url, func):
   key = url
   key = re.findall(r"(.+?)/<[a-zA-Z_][a-zA-Z0-9_]*>", url)
   if key:
      params = re.findall(r"<([a-zA-Z_][a-zA-Z0-9_]*)>", url)
      routing_table[key][0] = [[params], func]
   else:
      routing_table[url] = func

def find_path(url):
   if url in routing_table:
       return routing_table[url]
   else:
      return None

def index():
   return "This is the main page"

def hello():
   return "hi, how are you?"

def page(page_id = 7):
   return "this is page %d" % page_id

def hello():
   return "hi, how are you?"

route("/page/<page_id>", page)

print(routing_table)

【问题讨论】:

  • Stackoverflow 将允许您输入您喜欢的内容,但您可以通过使用 `(反引号)字符来防止它被解释为 HTML 标记 - 例如 &lt;this&gt;
  • 谢谢!我现在就编辑。

标签: python regex function dynamic parameters


【解决方案1】:

如果您只对找到的第一个值感兴趣,我不确定您为什么要使用 re.findall

尽管如此,您的问题只是索引结果的方式:key 是一个列表,正如错误所说,您不能将列表用作 dict 键。但是您已将[0] 放在第一组括号之外,因此Python 将其解释为您想要设置routing_table[key] 的第一个值,而不是您想要使用key 的第一个值作为设置。

你的真正意思是这样的:

routing_table[key[0]] = [[params], func]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 2015-06-02
    • 2011-11-01
    • 2013-10-05
    • 1970-01-01
    相关资源
    最近更新 更多