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

我们都知道函数是可以传参数的,那这里就牵扯出一个问题,传的参数是 值呢还是值的地址呢?我们来看下面两段代码一个是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作为一种静态语言,是可以自己控制的,希望从这个小概念大家能够明白一些,动静语言的不同之处,大家一起加油!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 19,126评论 17 410
  • 个人笔记,方便自己查阅使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik阅读 67,799评论 0 5
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,081评论 25 709
  • 星期三,3月,22日,妈妈上次给我买了一个冰淇淋,是一盒哦,而且呀,是榴莲味的哟。简直是好吃得不得不得不得了然后我...
    尊宝儿阅读 302评论 1 1
  • (一) “你一定在开玩笑,”“明天迎亲队伍该到了……”“好,我明白了。”“今晚是我们最后一次见面。” 我一把拉住田...
    一只眼睛做梦阅读 271评论 8 1