对 Python 也不是特别了解,下面的代码为什么会出现错误呢?
我应该先自己搜索的,已经习惯了创建主题🤐,python - Local (?) variable referenced before assignment - Stack Overflow给出了答案,不过我不知道为什么加上global之后会出现了NameError: name 'diameter' is not defined。
使用nonlocal解决了问题,可以点击closures - Python nonlocal statement - Stack Overflow了解更多。
1
learningman 2022-07-17 20:30:15 +08:00 via Android
用之前 global 一下
|
2
L1B 2022-07-17 20:38:31 +08:00
因为 python 在处理 dfs 函数的时候发现你给 diameter 赋值了于是认为它是一个 local variable ,这种情况用 1 楼说的方法,在 dfs 函数里面 global 申明一下即可。
|
3
filwaline 2022-07-17 21:34:35 +08:00
|
4
DOLLOR 2022-07-17 21:48:27 +08:00 1
由于 python 没有类似其他语言的 var 、let 声明关键字,所以嵌套的作用域内部,每个首次出现的 xxx = yyy 都视为声明新的变量。如果想沿用外部的变量,就要在该作用域下用 nonlocal 或者 global 再声明一次变量。
|
5
JasonLaw OP @learningman #1
@L1B #2 @filwaline #3 @DOLLOR #4 我加上了 global ,不过出现了 NameError: name 'diameter' is not defined ,详情可见附言,是哪里做错了吗? |
7
L1B 2022-07-17 22:13:28 +08:00
抱歉,我上面说错了,应该用 nonlocal 拿外层作用域(从内往外找最近的)的,global 是拿全局的,你这个 diameter 不是全局的。
|
9
dyrex 2022-07-17 23:56:42 +08:00 via Android
python 是动态类型,赋值即定义,函数内 diameter=相当于重新定义了一个变量,但是这个变量还没有赋值完成你就使用了,所以就报错了,可以使用 global 提升为全局变量,也可以使用 nonlocal 形成闭包来解决
|