我正在創建一個名爲pyma
的簡單包,可在pypi上獲得。在運行時創建一個動態命名的函數
我提供了一種方法來計算一個名爲NDayEMA(n, data)
的函數在N天的指數移動平均線。 (實際上,它是一個名爲NDayEMA
的類,具有一個名爲compute()
的功能,但在此處無關)。
我試圖在運行時爲用戶創建一個動態命名的函數作爲快捷方式。
例如:
NDayEMA(30, data)
和
EMA30(data)
將是相同的和
EMA23(data)
EMA1023(data)
EMA12(data)
也將是可用的。
我知道我需要一些reg-ex和處理,這在你的答案中是不需要的;我會自己得到它!我正在尋找如何接收用戶提供的函數的名稱,並創建一個具有該名稱的函數,而不會引發錯誤消息。
這是一個來自Laravel PHP framework的PHP等價物。
$user = DB::table('users')->where_email_and_password('[email protected]', 'secret');
好吧,我明白你的意思。我仍然覺得這個功能對用戶來說非常優雅。它有什麼缺點嗎?或者只是有一些糟糕的工作/價值比例? Laravel如何使用動態命名函數,它不好嗎? – PyWebDesign
缺點是你會使用大量的hacky元編程技術,這可能會減慢你的圖書館,但沒有任何它有時會帶來的好處。 Rails和其他一些框架使用find_by動態方法來做一些奇妙的事情,但這是他們決定做出的一個折衷;他們實際上已經不再那麼做了,因爲它通常會損害可維護性,使文檔查找變得更困難,並且通常比其他等價物慢。 – Ari