2010-07-24 41 views
8

我正在Python中構建用於表單驗證的DSL,其中一個要求是能夠指定字段應該大於或小於常量或其他字段值。因此,我試圖輕鬆映射<,>,<=>=等運算符與operator模塊中的等效函數,以便在字段驗證期間調用它們。將比較運算符映射到函數調用

我意識到我可以創建一個字典來映射操作符到函數,但是有沒有更好的方法來實現它?有什麼方法可以訪問Python的內置映射嗎?

+0

我不確定我明白你到底想要達到什麼目的。 Python將這些運算符'映射'到類自己實現的相應方法,比如'__cmp__','__eq__','__ne__'等等,並且精確映射到實際的比較函數取決於類。 – 2010-07-24 11:08:12

+1

絕對如此。所以Python中的某個地方是知道當它看到<<時應該調用'obj .__ lt__'的邏輯。但是我有一個字符串''<'' - 我如何將它轉換爲函數或方法調用? – 2010-07-24 11:26:31

+0

你可以給一個上下文的例子嗎? – 2010-07-26 07:15:52

回答

4

據我所知,沒有內置詞典的字符串">"映射到功能operator.lt

正如其他人所指出的那樣,Python解釋器本身並不使用這種因爲解析和執行Python代碼的過程首先將字符序列「>」轉換爲表示該運算符的令牌,然後將該字符轉換爲字節碼,並且執行該字節碼的結果將直接執行方法__lt__,而不是通過operator.lt函數。

3

Python的內部映射「<」到__lt__(依此類推)不會暴露在標準庫中的任何地方。 Python內部的許多內容並未作爲工具包公開。我甚至不確定如何創建這樣的映射。什麼映射到__getitem__

你只需要創建自己的映射。這不應該是困難的。