如何使用其他功能将参数传递给函数?

时间:2014-04-19 21:48:37

标签: python regex function dynamic parameters

我一直收到错误:“不可用类型:列表”表示行(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)

1 个答案:

答案 0 :(得分:1)

如果您只对找到的第一个值感兴趣,我不确定您使用re.findall的原因。

然而,您的问题只是索引结果的方式:key是一个列表,如错误所示,您不能将列表用作dict键。但是你已经将[0]置于第一组括号之外,因此Python将此解释为您希望设置routing_table[key]的第一个值,而不是您想要使用{{1的第一个值作为要设置的东西。

你的意思是:

key