好吧,我是一個Python的完整新手 - 和stackoverflow。我來自ksh和Perl背景。Python 3過濾器 - 錯誤或功能?
在與Python 2.7的交互式會話以下:
Python 2.7.3 (default, Jan 2 2013, 16:53:07) [GCC 4.7.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import re >>> KEY="REC_PAPER" >>> VALIDVALUES=filter(lambda x:re.search(r'^' + KEY + '\=', x), [ ... "REC_METAL=|YES|NO|", ... "REC_PAPER=|YES|NO|", ... "REC_GLASS=|YES|NO|", ... "REC_PLAST=|YES|NO|", ... "DEBUG_FLAG=|0|1|" ... ]) #End general list. >>> print(VALIDVALUES) ['REC_PAPER=|YES|NO|'] >>>
這是我所期待VALIDVALUES返回。然而,Python的3.2的交互式會話產量完全不同的結果:
Python 3.2.3 (default, Feb 20 2013, 17:02:41) [GCC 4.7.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import re >>> KEY="REC_PAPER" >>> VALIDVALUES=filter(lambda x:re.search(r'^' + KEY + '\=', x), [ ... "REC_METAL=|YES|NO|", ... "REC_PAPER=|YES|NO|", ... "REC_GLASS=|YES|NO|", ... "REC_PLAST=|YES|NO|", ... "DEBUG_FLAG=|0|1|" ... ]) #End general list. >>> print(VALIDVALUES) <filter object at 0xb734268c> >>>
我已經在好幾個地方(包括計算器)在哪裏見過Python的等價Perl的打擊名單的grep的是過濾列表。這似乎在Python 2中工作。但是,假設Python 3中的上述行爲是「正確的」,似乎不再是這種情況。
第一個問題:上述問題是否是Python 3中的一個bug或功能?
第二個問題:假設它是一個功能,我如何獲得Python 2給出的輸出?由於我不想進入的原因,我想遠離定義一個函數或子程序,並像當前的代碼那樣「內聯」。
我錯過了一些明顯的東西(對於新手來說很可能)?提前致謝。
這正是我所期待的。謝謝。這是預期的行爲(一個功能),並有一種方法來獲得所需的結果(通過列表())。我有一種感覺,有一塊(如列表()),我錯過了。再次謝謝你。 – user3325543