2024-04-25 05:12:54 发布
网友
假设我有个功能,像这样:
def test(*args, **kwargs): print(args, kwargs)
我想在地图对象中调用它,就像这样:
当我打印其中的值时,它显示:
>>> for i in obj: print(i) (2,) {'var': 1} None (3,) {'var': 2} None (4,) {'var': 3} None
None值来自何处?在
None
您的映射函数正在打印,而不是返回值,因此当您迭代map对象时,i被反复设置为None,None由任何没有显式return的函数返回)。要修复此问题,请将函数定义更改为类似于:
map
i
return
def test(*args, **kwargs): return args, kwargs
所以它返回值而不是打印它们,循环的print将看到它们而不是Nones
print
或者,保持函数不变,并将循环更改为:
这样就不打印无用的{{}s从^{{}}地图's mapping function should be side-effect free (}打印{}地图{}}{}}打印^{{}}返回{{}返回{{}}打印{{}}{{}}{{}}打印`,呼叫者不能真正做太多(即使他们通过低俗的黑客捕捉到它,他们卡住解析它解析它,做任何事情任何事情,他们坚持解析它,做任何事情{}}{{}}{}{{{{{{{有用)。在
's mapping function should be side-effect free (
您的函数test不返回任何内容,因此它返回None。所以在跑步之后
test
obj = map(lambda var: test(var+1, var = var), [1, 2, 3])
实际上,您将使用[None, None, None]得到{}。在
[None, None, None]
也许您希望在函数中返回而不是打印:
您的映射函数正在打印,而不是返回值,因此当您迭代
map
对象时,i
被反复设置为None
,None
由任何没有显式return
的函数返回)。要修复此问题,请将函数定义更改为类似于:所以它返回值而不是打印它们,循环的
print
将看到它们而不是None
s或者,保持函数不变,并将循环更改为:
^{pr2}$这样就不打印无用的{{}s从^{{}}地图}地图{}}{}}打印^{{}}返回{{}返回{{}}打印{{}}{{}}{{}}打印`,呼叫者不能真正做太多(即使他们通过低俗的黑客捕捉到它,他们卡住解析它解析它,做任何事情任何事情,他们坚持解析它,做任何事情{}}{{}}{}{{{{{{{有用)。在
's mapping function should be side-effect free (
}打印{您的函数
test
不返回任何内容,因此它返回None
。所以在跑步之后实际上,您将使用}。在
[None, None, None]
得到{也许您希望在函数中返回而不是打印:
^{pr2}$相关问题 更多 >
编程相关推荐