Python for循环和UnboundLocalError
我是新来的。现在我在python的局部变量设置方面遇到了一些问题 事情是这样的,我得到了一个错误的输出,名为:Python for循环和UnboundLocalError,python,for-loop,local,insertion-sort,xrange,Python,For Loop,Local,Insertion Sort,Xrange,我是新来的。现在我在python的局部变量设置方面遇到了一些问题 事情是这样的,我得到了一个错误的输出,名为: UnboundLocalError: local variable 'i1' referenced before assignment 通过搜索StackOverFlow,我现在知道我的错误是由于局部变量的作用范围。For python是一种动态语言,没有变量声明。外面有没有人可以帮忙解决这个问题?我真的需要在迭代之后使用这个变量。非常感谢。(虽然我知道它可以工作,但我不喜欢使用全局
UnboundLocalError: local variable 'i1' referenced before assignment
通过搜索StackOverFlow,我现在知道我的错误是由于局部变量的作用范围。For python是一种动态语言,没有变量声明。外面有没有人可以帮忙解决这个问题?我真的需要在迭代之后使用这个变量。非常感谢。(虽然我知道它可以工作,但我不喜欢使用全局声明)
这是我的代码,我用它来完成插入排序
def insert_sort(my_str):
locf = len(my_str)
for j1 in xrange(1,locf,1):
ticket = 0
temp = my_str[j1]
for i1 in xrange(j1-1,0,-1):
if i1>=0 and my_str[i1]<my_str[j1]:
ticket = 1
my_str[i1+1] = my_str[i1]
else:
break
if ticket == 0:
my_str[i1] = temp
return my_str
衷心感谢。实际上,您可以使用中指定的值来定义该循环之外的循环,例如:
for x in range(5):
print x # 0 1 2 3 4
print x # still 4
但是,在代码中,当j1==1
时,(其第一个值)xrange(j1-1,0,-1)
是xrange(0,0,-1)
,它是一个空迭代器,因此从不分配i1
最简单的解决方案是更改j1
的分配方式:
for j1 in xrange(2, locf, 1):
现在,将为j1
的所有值分配i1
但是通过在循环外使用i1
,您使用的是它的最后一个值,对吗?哇,现在我得到了它。。。但是这个变量的作用范围呢。现在我有点困惑…我不明白你说的“功能范围”是什么意思。哪个变量?在你的例子中是x。何时何地它将不再工作。。。这个变量会一直保持活动直到函数本身结束吗?哦,我明白了。是的,在函数结束之前,它将一直保留在作用域中,保留它在循环中的最后一个值(除非重新分配)。@Tk_75963这是一个粗略的链接;我相信你的话!
for x in range(5):
print x # 0 1 2 3 4
print x # still 4
for j1 in xrange(2, locf, 1):