【发布时间】:2014-05-09 11:29:46
【问题描述】:
所以我有一些类似的代码(这段代码重现了我的问题,即使它没有做任何有用的事情):
def fn():
l = ["foo", "bar", "baz"]
print map( lambda f : len(f), l )
for i, f in enumerate(l):
print i, f
PyCharm 报告我的 lambda f“阴影名称 f 来自外部范围”的声明。这似乎是因为在下一行中对 enumerate() 的调用中重用了该变量。
代码按预期工作,但这里发生了什么?我认为 Python 决定 f 是 fn 中的局部变量并警告我在 lambda 中使用 f 不会与本地定义的 f 相同 - 即使lambda 首先使用变量名f?
除了重命名变量之外,是否有避免这种情况的最佳做法 - 还是我应该根据自己的判断而忽略这种情况下的警告?
【问题讨论】:
-
如果有什么不同,这在 Python 2.7 中。
-
只需使用
print map(len, l)。 -
这是一个用于说明语言特性的玩具示例,而不是生产代码。