繁体   English   中英

了解 Python - 在 Function 外部定义的变量,但在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM