54.C#函数参数out、ref的使用以及Python

函数参数out、ref都是向外传递参数值,以弥补返回值只有一个的缺陷。函数参数可以有多个out参数,因此这样的函数返回的数据是开放的。out和ref的区别是out不用为out参数附初值,而ref必须附初值。

python可以return可以返回多个参数,一般不必要使用out和ref参数。这降低了python的难度。


public static void FillArray(out int[] arr)
{
    arr = new int[] { 1, 2, 3, 4, 5 };
}

public static void FillArrayRef(ref int[] arrRef)
{
    arrRef = new int[] { 6, 7, 8, 9, 0 };
}

public static void MaxMinValue(int[] intArray, out int max, out int maxIndex)
{
    max = intArray[0];
    maxIndex = 0;
    for(int i=1;i<intArray.Length;i++)
    {
        if (intArray[i] > max)
        {
            max = intArray[i];
            maxIndex = i;
        }
    }
}
static void Main(string[] args)
{
    //用out参数填充数组
    int[] theArray;//不用初始化
    useout.FillArray(out theArray);
    Console.WriteLine("theArray:");
    foreach(int i in theArray)
    {
        Console.Write(i);
        Console.Write(" ");
    }

    //用ref参数填充数组
    int[] arrRef = new int[5];//需要初始化
    useout.FillArrayRef(ref arrRef);
    Console.WriteLine();
    Console.WriteLine("arrRef:");
    foreach(int i in arrRef)
    {
        Console.Write(i);
        Console.Write(" ");
    }

    //找出最大年龄及序号:
    int[] age = { 34, 24, 65, 76, 39, 57, 89 };
    int max = 0;
    int maxIndex=0;

    useout.MaxMinValue(age, out max, out maxIndex);
    Console.WriteLine();
    Console.WriteLine($"年龄最大的是:{max},序号是{maxIndex+1}");
}

输出是:

python就没有这么多说道了,一般不需要out参数,因为python可以返回不止一个返回值。

def maxminValue(alist):
    x=max(alist);
    y=min(alist);
    return x,y
a,b=maxminValue([3,2,5,4,8,6,9])
print(a,b)#输出9,2

或者使用全局变量“global”来返回out参数。

def maxminValue(alist):
    global x,y#不能为global变量直接赋值。
    x=max(alist)
    y=min(alist)
    return x+y,x*y
a,b=maxminValue([3,2,5,4,8,6,9])
print(a,b)#11,18
print(x,y)#9,2

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章