Python for循环和UnboundLocalError

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是一种动态语言,没有变量声明。外面有没有人可以帮忙解决这个问题?我真的需要在迭代之后使用这个变量。非常感谢。(虽然我知道它可以工作,但我不喜欢使用全局

我是新来的。现在我在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):