2014-11-15 46 views
1

Pyparsing文檔顯示如何使用setResultsName(...)方法來設置生成的字典密鑰。但是,我幾次看到此方法被省略,並且僅使用(...)。 我的意思是:在pyparsing表達式中忽略setResultsName

相反的:

exp1 = pp.Word(pp.alphas).setResultsName('word1') 
exp1.parseString("Hello").asDict() 

...一個可以這樣做:

exp1 = pp.Word(pp.alphas)('word1') 
exp1.parseString("Hello").asDict() 

...,結果將是完全一樣的。

所以2個問題:

  1. 我在哪裏可以找到這個文件,確認忽略setResultsName可以做什麼?

  2. 這是如何工作的?是pp.Word(pp.alphas),是一個pyparsing對象,函數?那麼它是如何實現的?

感謝

回答

1

您可以找到pyparsing文檔online

setResultsName文檔說:

用於引用匹配令牌作爲 返回的解析結果的嵌套屬性定義的名稱。注意:這返回副本的 原始ParserElement對象;這樣客戶就可以定義一個基本元素,例如一個整數,並在多個地方使用不同的名稱引用它 。

您還可以使用縮寫語法 expr(「name」)代替expr.setResultsName(「name」)來設置結果名稱 - 請參閱__call__

__call__的信息確認了此行爲。

由於ParserElement類實現了__call__,這使得該類的實例可以被調用,就像函數一樣。在這種情況下,使用字符串參數調用ParserElement實例相當於調用setResultsName