【发布时间】:2014-05-04 08:20:10
【问题描述】:
我是python新手。现在我在 python 的局部变量设置方面遇到了一些问题。
事情是这样的,我得到了一个错误输出:
UnboundLocalError: local variable 'i1' referenced before assignment
通过在 StackOverFlow 上搜索,我现在知道我的错误是由于局部变量的功能范围造成的。因为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
错误是:
File "/Users/tk/PycharmProjects/pyal/Insertation Sort.py", line 34, in <module>
print insert_sort(tk_list)
File "/Users/tk/PycharmProjects/pyal/Insertation Sort.py", line 15, in insert_sort
my_str[i1] = temp
UnboundLocalError: local variable 'i1' referenced before assignment
我知道这是因为 i1 在 for 循环 内,不能在外部使用。但是如果我确实需要这样做呢?有什么补偿方法吗?
当然,我不能使用 for 循环而使用 while。但有时我确实需要在其范围之外的循环中使用局部变量。 我已经用while循环写出来了:
def insert_sort(my_str):
locf = len(my_str)
for j1 in xrange(1,locf,1):
temp = my_str[j1]
i1 = j1 -1
while i1>=0 and my_str[i1]>temp:
my_str[i1+1] = my_str[i1]
i1 -= 1
my_str[i1+1] = temp
return my_str
衷心感谢。
【问题讨论】:
-
但是通过在循环外使用
i1,您使用的是它的最后一个值,对吗?
标签: python for-loop local insertion-sort xrange