Lambda参数与外部循环变量同名未报错,原因何在?
同名变量无冲突的原因解析
问题场景
代码示例:
for i, x in enumerate(list_images): image_path = os.path.join(parent_directory, x) img = Image.open(image_path).convert('L') img = np.array(img.point(lambda x: 1 if x > 127 else 0))
编写时无意间将for循环的迭代变量x和lambda函数的参数都命名为x,但代码运行正常,修改lambda参数名后结果无差异,疑问:这两个同名变量为何没有冲突?是否因为lambda参数处于独立作用域?
解答
核心原因就是作用域隔离:
- for循环里的
x属于当前代码块的外层局部作用域,而lambda函数的参数x是lambda自身的局部作用域变量。 - 当
img.point()调用lambda时,会逐个传入像素值给lambda的参数x,此时lambda会优先使用自身作用域内的x,完全不会访问外层循环的那个x变量。 - 这两个
x只是名字相同,本质是不同作用域下的独立变量,互相没有影响,所以不会出现冲突。
内容的提问来源于stack exchange,提问作者pedro_galher
相关产品推荐
相关产品推荐

