Python Nested Function Variable Assignment
本问题已经有最佳答案,请猛点这里访问。
我正试图在python3中沿着以下几行做一些事情:
1 2 3 4 5 | i = 1337 def g(): print(i) i = 42 g() |
但得到以下错误
1 | UnboundLocalError: local variable 'i' referenced before assignment |
我想我理解错误消息的含义,但为什么会这样呢?有什么办法可以绕过这个问题吗?
两个字-当一个给定的变量名没有在一个函数中分配一个值时,将查找对该变量的引用。使用全局-在这种情况下,python将在全局范围内查找i:
1 2 3 4 5 6 7 8 | i = 1337 def g(): global i print i i = 42 g() |
您可以在PEP-0227中阅读更多关于变量范围的内容。
如果你真的想这样做,你需要从全球范围内得到我。
1 2 3 4 | def g(): global i print i i = 42 |
但是,一般来说,将代码的工作方式更改为不需要全局变量会更好。根据您使用它的方式,这可能与将i作为参数传入并返回更改的值一样简单。
Keeyai建议将i作为参数传入的示例:
1 2 3 4 5 | i = 1337 def g(i): print(i) i = 42 g(i) |
然而,你从来没有使用过我的新价值,所以像这样的事情可能更有意义:
1 2 3 4 5 6 | def g (i): i = 42 return i i = 1337 print g(i) |