簡體   English   中英

如何使用其他函數將參數傳遞給函數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM