2016-02-18 70 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.