内部函数的代码是什么时候;“可用”;在python3中使用外部函数?
您好,我正在研究算法,我已经编写了quickSort的工作版本,请参见下面的代码:内部函数的代码是什么时候;“可用”;在python3中使用外部函数?,python,python-3.x,nested-function,Python,Python 3.x,Nested Function,您好,我正在研究算法,我已经编写了quickSort的工作版本,请参见下面的代码: def quickSort(mylist, l, r): if l < r: q = partition(mylist, l, r) quickSort(mylist, l, q-1) quickSort(mylist, q+1, r) def partition(mylist, l, r): i = l-1
def quickSort(mylist, l, r):
if l < r:
q = partition(mylist, l, r)
quickSort(mylist, l, q-1)
quickSort(mylist, q+1, r)
def partition(mylist, l, r):
i = l-1
j = l
while j < r:
if mylist[j] < mylist[r]:
i += 1
mylist[i], mylist[j] = mylist[j], mylist[i]
j += 1
mylist[i+1], mylist[j] = mylist[j], mylist[i+1]
return i+1
mylist = [54,26,93,17,77,31,44,55,20,22]
l = 0
r = len(mylist) -1
quickSort(mylist, l, r)
def快速排序(mylist,l,r):
如果l
然而,当我运行这个时,我得到了
UnboundLocalError:赋值前引用的局部变量“partition”
解决方法是移动快速排序
顶部的内部函数分区
的定义,以便它在定义之前不会调用分区
但我不明白为什么,我的猜测是,在外部函数实际执行之前,内部函数并不“存在”。有人能帮我澄清一下这一点吗?在python中,可以将函数视为可调用变量 例如,您可以将它们指定给变量名,如以下示例所示:
def example_function():
print("Hello world!")
example_var = example_function
example_var() # call the variable!
正如您可以重新分配变量一样,您也可以重新分配函数定义,这意味着函数的定义不是全局的:
def my_function():
print("first")
my_function() # prints "first"
def my_function():
print("redefined")
my_function() # prints "redefined"
所以就像你不会期望这样的事情一样
# a _not_ defined above
print(a) # even if this worked, should it print "3" or "4"?
a = 3
a = 4
。。。要工作,由于变量尚未定义,尚未定义的函数调用也是无效的
与任何其他变量一样,将来声明的定义也仅在该将来有效,并且一旦重新定义,它将被废弃