为什么此映射在命令行中不起作用?命令行中的Python命令未执行
只是默默地失败:
python -c "x=range(1000);map(lambda l: print(l), x)"
的map
应该遍历range
,因为它的工作原理的Python REPL里面。
为什么此映射在命令行中不起作用?命令行中的Python命令未执行
只是默默地失败:
python -c "x=range(1000);map(lambda l: print(l), x)"
的map
应该遍历range
,因为它的工作原理的Python REPL里面。
你可能尝试与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 ]))"
'map(print,x)'和'map(str,x)'更简洁一些,不需要'lambda's。 –
当您运行此代码(在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.
试调用'python3 -c ...'''python'通常是Python 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