zoukankan      html  css  js  c++  java
  • Python什么是值或引用函数参数

    这篇文章是Python前往遇到有疑问的功能。

    下面一段是原有的基础教程Python函数

    按值传递參数和按引用传递參数

    全部參数(自变量)在Python里都是按引用传递。假设你在函数里改动了參数,那么在调用这个函数的函数里,原始的參数也被改变了。比如:

    #!/usr/bin/python
     
    # 可写函数说明
    def changeme( mylist ):
       "改动传入的列表"
       mylist.append([1,2,3,4]);
       print "函数内取值: ", mylist
       return
     
    # 调用changeme函数
    mylist = [10,20,30];
    changeme( mylist );
    print "函数外取值: ", mylist

    传入函数的和在末尾加入新内容的对象用的是同一个引用。故输出结果例如以下:

    函数内取值:  [10, 20, 30, [1, 2, 3, 4]]
    函数外取值:  [10, 20, 30, [1, 2, 3, 4]]


    好。看到这里。自己亲手測试一下,代码:

    def printme(age,str):
        str = 'str changed!'
        print age,str
        return
    
    str = 'ori str'
    age = 23
    printme(age,str)
    print str
    输出结果:

    23 str changed!
    ori str

    好像哪里不正确啊!不是说函数内部改动了參数的值,那么实际參数也会变吗?!

    难道它对字符串和列表等还不是同等对待?
    有经验的人都知道,在python中,strings, tuples, 和numbers是不可更改的对象,而list,dict等则是能够改动的对象


    那么,就记住红色文字的这句话吧,你想改动不可更改的对象时。事实上就开辟了一个新新对象的存储空间,这就是为什么有问题的全球范围和局部范围。

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    设计模式のStrategyPattern(策略模式)----行为模式
    C#反射の一个泛型反射实现的网络请求框架
    C#反射の反射泛型
    C#反射の反射接口
    .Net下的全局异常捕获问题
    设计模式のIOC(控制反转)
    VS2015应用NuGet
    Linux shell脚本的建立与执行
    (转)小小的研究了一下linux下的”注册表“ gconf-editor
    用Visual Studio编辑Linux代码
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4683614.html
Copyright © 2011-2022 走看看