[英]How do I pass parameters into functions using other functions?
我不斷收到錯誤消息:行的“ unhashable type:list”(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)
如果您只對找到的第一個值感興趣,我不確定為什么要使用re.findall
。
但是,您的問題只是對結果建立索引的方式: key
是一個列表,並且如錯誤所示,您不能將列表用作dict鍵。 但是您將[0]
放在了第一組括號之外,因此Python會將其解釋為想要設置routing_table[key]
的第一個值,而不是想要將key
的第一個值用作要設置的東西。
您的實際意思是:
routing_table[key[0]] = [[params], func]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.