Python中变量作用域问题:如何解决 shadow name x from outer scope 警告
一个字符串拼接函数
def func(ver):
__ret = ‘’
__for k, v in ver.items():
____ret += ‘{0}:{1}’.format(k, v)
__return ret
问题是第二行的 ret=’’ 回报 shadow name ret from outer scope 的错误。要再 for 循环里加 global ret 才能去掉。
我想问下,这类代码,常规做法是怎么做的?
Python中变量作用域问题:如何解决 shadow name x from outer scope 警告
4 回复
你在函数外部定义了同名变量
这个问题很常见,是PyCharm这类IDE的代码检查工具(比如Pylint)在提醒你变量名覆盖了外部作用域的同名变量。
简单说,就是你在一个函数或循环里,用了一个和外部变量(比如函数参数、外层变量)一样的名字。IDE觉得这可能会让你搞混,所以给个警告。
直接解决办法:
-
改个名字:这是最直接、最推荐的做法。把内层的变量换个名字,意思清楚就行。
def calculate_total(prices): total = 0 # 外层变量 for price in prices: # 循环变量用 price,而不是 total total += price return total -
如果确定没问题,就关掉这个检查:如果你很清楚自己在做什么,比如内层变量就是临时用一下,可以忽略这个警告。
- 在PyCharm里:把光标放在警告那行,按
Alt+Enter,选Ignore shadowing names from outer scope。 - 全局关闭(不推荐):在设置里搜
Shadowing names from outer scope关掉,但可能会错过其他有用的提醒。
- 在PyCharm里:把光标放在警告那行,按
核心建议:起不同的名字能避免很多混淆。
这个是错误吗~?我感觉这种是警告是不是会比较好…
这个不是 pycharm 的警告吗?

