我正在Python中構建用於表單驗證的DSL,其中一個要求是能夠指定字段應該大於或小於常量或其他字段值。因此,我試圖輕鬆映射<
,>
,<=
和>=
等運算符與operator
模塊中的等效函數,以便在字段驗證期間調用它們。將比較運算符映射到函數調用
我意識到我可以創建一個字典來映射操作符到函數,但是有沒有更好的方法來實現它?有什麼方法可以訪問Python的內置映射嗎?
我正在Python中構建用於表單驗證的DSL,其中一個要求是能夠指定字段應該大於或小於常量或其他字段值。因此,我試圖輕鬆映射<
,>
,<=
和>=
等運算符與operator
模塊中的等效函數,以便在字段驗證期間調用它們。將比較運算符映射到函數調用
我意識到我可以創建一個字典來映射操作符到函數,但是有沒有更好的方法來實現它?有什麼方法可以訪問Python的內置映射嗎?
據我所知,沒有內置詞典的字符串">"
映射到功能operator.lt
等
正如其他人所指出的那樣,Python解釋器本身並不使用這種因爲解析和執行Python代碼的過程首先將字符序列「>」轉換爲表示該運算符的令牌,然後將該字符轉換爲字節碼,並且執行該字節碼的結果將直接執行方法__lt__
,而不是通過operator.lt
函數。
Python的內部映射「<」到__lt__
(依此類推)不會暴露在標準庫中的任何地方。 Python內部的許多內容並未作爲工具包公開。我甚至不確定如何創建這樣的映射。什麼映射到__getitem__
?
你只需要創建自己的映射。這不應該是困難的。
我不確定我明白你到底想要達到什麼目的。 Python將這些運算符'映射'到類自己實現的相應方法,比如'__cmp__','__eq__','__ne__'等等,並且精確映射到實際的比較函數取決於類。 – 2010-07-24 11:08:12
絕對如此。所以Python中的某個地方是知道當它看到<<時應該調用'obj .__ lt__'的邏輯。但是我有一個字符串''<'' - 我如何將它轉換爲函數或方法調用? – 2010-07-24 11:26:31
你可以給一個上下文的例子嗎? – 2010-07-26 07:15:52