Python生成器函数变量遮蔽外部作用域名称的原因咨询
变量遮蔽警告的原因解析
先看你提供的代码:
def do_stuff(var): shadow = var * var def dummy_generator(size): for i in range(size): do_stuff(i) yield i if __name__ == '__main__': for shadow in dummy_generator(5): print(shadow)
PyCharm弹出的“Shadows name 'shadow' from outer scope”警告,原因是它的静态代码分析逻辑会扫描整个文件内的所有变量名:
do_stuff函数内部定义的shadow是函数局部变量,主模块__main__代码块里的shadow是for循环的迭代变量,二者在Python运行时属于完全独立的作用域,不会互相干扰。- 但PyCharm的检查规则会把文件中所有同名变量纳入比对,当它发现内部作用域的变量名和外部某个作用域的变量名重复时,就会触发这个警告——目的是提醒你注意命名重复,避免后续修改代码时不小心混淆不同作用域的变量,导致逻辑错误。
简单说,这是PyCharm的静态检查提示,而非Python语法或运行时的错误,你的代码实际运行不会有问题。
内容的提问来源于stack exchange,提问作者Markus Moll
相关产品推荐
相关产品推荐

