2016-02-18 95 views
0

爲什麼此映射在命令行中不起作用?命令行中的Python命令未執行

只是默默地失敗:

python -c "x=range(1000);map(lambda l: print(l), x)" 

map應該遍歷range,因爲它的工作原理的Python REPL裏面。

+0

試調用'python3 -c ...'''python'通常是Python 2 –

+2

Side-note:Usin g'map'的副作用被認爲是不好的形式;它是非常糟糕的,因爲你不必要地依賴'lambda'函數('map(print,x)'將是相同的,並且不涉及來自'lambda'包裝的無意義的減速/冗長)。一個更好的解決方案是:print(* x,sep =「\ n」)'一次打印所有文件(適用於小輸出序列,但不適用於數百萬輸出),或者只使用顯式循環'for l in x :print(l)'(儘管後者可能不適合單線運動員)。如果你必須'map',只需'list' - 如果強制'map'運行:'list(map(print,x))'。 – ShadowRanger

回答

1

你可能嘗試與python2.x運行(以確保嘗試運行python --version

在Python 2 lambda l: print(l)是無效的,因爲印刷是不是正規的函數/方法。

嘗試運行

python3 -c "x=range(1000);map (lambda l:print(l), x)΅ 

如果你想一個解決方案,與兩個版本兼容,請嘗試:

python -c "x=range(1000); print('\n'.join(map(lambda l: str(l), x)))" 

獎勵: 溶液使用列表理解:

python -c "x=range(1000); print('\n'.join([ str(l) for l in x ]))" 
+0

'map(print,x)'和'map(str,x)'更簡潔一些,不需要'lambda's。 –

1

當您運行此代碼(在python 3中)時,代碼運行正常。然而,該代碼返回的是一個映射對象,其中包含的說明打印的數字,因爲在這裏顯示

>>> x=range(1000);map (lambda l:print(l), x) 
<map object at 0x6ffffd0cba8> 

爲了讓數字來打印,你會需要遍歷在地圖上,像

>>> x=range(1000) 
>>> y=map (lambda l:print(l), x) 
>>> for n in y: 
... pass 
... 
0 
1 
2 
3 
4 
5 
6 
7 
8 
etc.