我在这做错了什么?
counter = 0
def increment():
counter += 1
increment()
Run Code Online (Sandbox Code Playgroud)
上面的代码抛出了一个UnboundLocalError.
我正在尝试在Python 2.6中实现一个闭包,我需要访问一个非局部变量,但似乎这个关键字在python 2.x中不可用.如何在这些版本的python中访问闭包中的非局部变量?
test1 = 0
def testFunc():
test1 += 1
testFunc()
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
UnboundLocalError:赋值前引用的局部变量'test1'.
错误说这'test1'是局部变量,但我认为这个变量是全局的
那么它是全局的还是本地的,如何解决这个错误而不将全局test1作为参数传递给testFunc?
给出以下代码:
def A() :
b = 1
def B() :
# I can access 'b' from here.
print( b )
# But can i modify 'b' here? 'global' and assignment will not work.
B()
A()
Run Code Online (Sandbox Code Playgroud)
对于B()函数变量中的代码,b在外部作用域中,但不在全局作用域中.是否可以b从B()函数内修改变量?当然我可以从这里读取它print(),但是如何修改呢?
好吧,我只是试着看看变量范围如何工作并在以下情况下运行.全部从终端跑:
x = 1
def inc():
x += 5
inc()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in inc
UnboundLocalError: local variable 'x' referenced before assignment
Run Code Online (Sandbox Code Playgroud)
所以我思考得很好也许我的方法无法访问x,所以我尝试了:
def inc():
print(x)
1
Run Code Online (Sandbox Code Playgroud)
这样可行.现在我知道我可以这样做:
def inc():
global x
x += 1
Run Code Online (Sandbox Code Playgroud)
这会奏效.但我的问题是为什么第一个例子失败了.我的意思是我希望自从print(x)工作以来x在函数内可见,那么为什么x + = 5失败?
我正在学习Python.一本关于Python 3的书说以下代码应该可以正常工作:
def funky():
print(myvar)
myvar = 20
print(myvar)
myvar = 10
funky()
Run Code Online (Sandbox Code Playgroud)
但是当我在Python 3.3中运行它时,我得到了
UnboundLocalError: local variable 'myvar' referenced before assignment
Run Code Online (Sandbox Code Playgroud)
错误.我的理解是,首先print(myvar)在funky应该是10,因为它是一个全局变量.第二个print(myvar)应该是20,因为本地myvar被定义为20.这里发生了什么?请帮忙澄清一下.
我首先要说的是:我知道这个问题被很多人问到。我已经阅读了其他答案,并排除了:
我没有使用 += 进行作业;
我尝试显式分配函数中的每个变量,以确保它们不为空,以防函数执行的其他工作失败;
它们不是全局变量,我也不希望它们成为全局变量——它们只是我用来计算最终返回的内容的内部变量。
## Gets the data from external website - refreshes whenever the programme is called.
## Urllib2 required module
## csv to make life easier handling the data
import urllib2
import csv
import sys
import math
# import sqlite3 #don't need this just now, will probably run Django with MySQL when it comes to it
# import MySQLdb Likewise, don't need this just now.
#python3
import atexit
from time import time
from datetime …Run Code Online (Sandbox Code Playgroud) 我一直在尝试定义一个函数,它会将所有其他字母大写,并将空格转换为例如:
print function_name("Hello world")应打印"HeLlO wOrLd"而不是"HeLlO WoRlD"
我希望这是有道理的.任何帮助表示赞赏.
谢谢,奥利
我来自具有丰富Java和PHP经验的国家,因此当涉及Python时,许多规则对我来说都不有意义。
我下面有一个递归的斐波那契函数,它吐出错误:
Traceback (most recent call last):
File "C:\Users\Nic\workspace\lab8\src\Main.py", line 26, in <module>
print fibcount(27),"took",calls,"calls."
File "C:\Users\Nic\workspace\lab8\src\Main.py", line 19, in fibcount
calls += 1
UnboundLocalError: local variable 'calls' referenced before assignment
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
calls = 0
def fibcount(n):
calls += 1
if n < 2:
return (1,1)
f1,c1 = fibcount(n-1)
f2,c2 = fibcount(n-2)
return (f1+f2,c1+c2+1)
print fibcount(27),"took",calls,"calls."
Run Code Online (Sandbox Code Playgroud)
在Java中,这显然是可行的,因为相对于函数而言,调用是全局变量,fibcount()因此使我感到困惑的是,调用不在某种程度上。
我究竟做错了什么?
python ×9
function ×2
python-2.7 ×2
python-3.x ×2
closures ×1
python-2.x ×1
recursion ×1
scope ×1
variables ×1