美文网首页
Go与Python的异同之:参数传递详解

Go与Python的异同之:参数传递详解

作者: __apple | 来源:发表于2018-03-20 20:26 被阅读0次

    我们都知道函数是可以传参数的,那这里就牵扯出一个问题,传的参数是 值呢还是值的地址呢?我们来看下面两段代码一个是Python的一个是Go的

    下面是python的代码我们要做的事情很简单就是看能否改变初值

    a=2
    b=[1,2,3]
    def change(x,y):
       x=3
       y[0]=4
    change(a,b)
    print a, b
    
    输出结果: 2 [4, 2, 3];可以看出数字作为一个不可变对象,a的值没有变化,而b作为列表对象,是可变对象,所以b被改变了。

    我们在来看Go的表现

    func swap(a, b int){
        a, b = b, a
    }
    func main(){
        a, b := 1, 2
        swap(1, 2)
        fmt.Println(a, b) // 1 2
    }
    

    通过上述我们可以看到 Go是值传递,值没有改变,那么我们怎么样才能让它改变呢?看下面

    func swap(a, b *int){
        *b, *a = *a, *b
    }
    
    func main(){
        a, b := 1, 2
        swap(&a, &b)
        fmt.Println(a, b) // 2, 1
    }
    

    综上所述:Python作为一种动态语言是在运行的时候动态的判断是传值还是传引用,如果你传入的参数对象是可变对象:列表,字典,这个时候就是引用传递,如果参数在函数体内被修改,那么源对象也会被修改。Go作为一种静态语言,是可以自己控制的,希望从这个小概念大家能够明白一些,动静语言的不同之处,大家一起加油!!

    相关文章

      网友评论

          本文标题:Go与Python的异同之:参数传递详解

          本文链接:https://www.haomeiwen.com/subject/byxiqftx.html