You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

直接在locals().keys()中检测多个变量为何失败?

问题:直接在any()生成器中调用locals()检测变量存在性返回False?

在Spyder控制台做了以下测试:

  1. 定义局部变量:
>>> LatLim = (36.033333,36.2333)
>>> LongLim = (-5.5333,-5.25)
>>> locals().keys()
dict_keys(['__name__', '__builtin__', ... 'LatLim', 'LongLim', ... ])
  1. 单独检测每个变量均返回True:
>>> 'LatLim' in locals().keys()
True

>>> 'LongLim' in locals().keys()
True
  1. 但用any()批量检测时返回False:
>>> any( key in locals().keys()
         for key in ('LatLim','LongLim') )
False
  1. 先将locals().keys()存入变量再检测则成功:
>>> LocalsKeys = locals().keys()
>>> any( key in LocalsKeys for key in ('LatLim','LongLim') )
True

为什么直接检测locals().keys()时批量验证会失败?


原因分析

核心问题出在生成器表达式的作用域特性:

  • 当你在any()中使用生成器表达式(key in locals().keys() for key in ...)时,生成器在迭代执行时会创建自己的局部作用域。每次调用locals(),返回的都是这个生成器内部的局部作用域字典,而非外层控制台的全局/局部作用域。
  • 生成器内部的局部作用域里并没有LatLim和LongLim这两个变量,所以每次检测都会返回False,最终any()的结果就是False。

而先把locals().keys()赋值给变量LocalsKeys时,这个变量捕获的是外层控制台的局部作用域的键集合。之后在生成器里用这个变量检测,自然能匹配到目标键,返回True。


内容的提问来源于stack exchange,提问作者user2153235

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 00:57:35