![](/img/trans.png)
[英]return variable name from outside of function, as string inside python function
[英]Understanding Python - Variable Defined Outside Function, But Changed Inside Function with no return
我最近遇到了快速排序算法,并在 Geeksforgeeks 上的 Python 中找到了一个示例: https://www.geeksforgeeks.org/python-program-for-quicksort/
我的问题是:变量 arr 是在 function Quicksort 之外定义的。那么如何在没有全局或返回的情况下在 function 内外都知道变量?
抱歉,如果这基本上是在其他地方发布的,或者如果发布其他人的代码是禁止的。 不想声称这是我的,我只是之前没有看到 Python 代码这样做。 这不是算法本身,也不是递归函数的使用.. 让我感到困惑的是缺少全局或返回。
def Partition(arr, low, high):
i= low - 1
pivot= arr[high]
for j in range(low, high):
if arr[j] <= pivot:
i += 1
arr[i], arr[j] = arr[j], arr[i]
arr[i+1], arr[high] = arr[high], arr[i+1]
return i+1
def QuickSort(arr, low, high):
if len(arr) == 1:
return arr
if low < high:
pi= Partition(arr, low, high)
QuickSort(arr, low, pi-1)
QuickSort(arr, pi+1, high)
arr = [10, 7, 8, 9, 1, 5]
n= len(arr)
QuickSort(arr, 0, n-1)
print("Sorted array is:")
for i in range(n):
print("%d" % arr[i])
arr
在这里作为参数传入。 这是一种误导,因为 function 中的变量名称与全局变量名称相同,尽管它不需要。 例如,以下代码与您发布的代码相同:
def Partition(mylst, low, high):
i= low - 1
pivot= mylst[high]
for j in range(low, high):
if mylst[j] <= pivot:
i += 1
mylst[i], mylst[j] = mylst[j], mylst[i]
mylst[i+1], mylst[high] = mylst[high], mylst[i+1]
return i+1
def QuickSort(mylst, low, high):
if len(mylst) == 1:
return mylst
if low < high:
pi= Partition(mylst, low, high)
QuickSort(mylst, low, pi-1)
QuickSort(mylst, pi+1, high)
arr = [10, 7, 8, 9, 1, 5]
n= len(arr)
QuickSort(arr, 0, n-1)
print("Sorted array is:")
for i in range(n):
print("%d" % arr[i])
除此之外,只要您不更改变量是什么,您仍然可以修改 Python 中的全局值。 这里的区别是你没有改变arr
的值,而是它指向的实际数组的值,所以即使你想修改全局数组,你也不需要 global 关键字。
像这样的事情在实践中通常不会经常做,所以不要太担心。 至少在这种情况下,数组被传递到 function,Quicksort function 直接修改传递给它的数组(在这个例子中它恰好是arr
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.