• Python 函数的参数传递


    C/C++中,传递参数的类型是可以指定的。一般来说,传递参数可以分为两种:值传递和引用传递。对于值传递,参数传递的过程中进行了复制操作,也就是说,在函数中对参数的任何改动都不会影响到传入的变量;对于引用传递,函数中的对象与传入的对象其实是同一个对象,也就是说,参数仅仅是原对象的一个引用。一般来说,C/C++默认的方式都是值传递,要改变原对象,可采用显式的引用或者指针传递的方式。

    那么,在Python中呢?Python语言中显然没有能指定传递类型的语法,毕竟是一门动态的解释型语言,也没有显式的类型要求。

    下面验证Python函数参数传递的方式:

    def changelist(lst): #修改列表
        lst[0] = '1'
    lst = [111, 2, 3, 4]
    changelist(lst)
    print lst
    def changedict(dic): #修改字典
        dic["lustar"] ="yes"
    dict1 = {"lustar": "no"}
    changedict(dict1)
    print dict1

    输出结果为:

    ['1', 2, 3, 4]
    {'lustar': 'yes'}

    可见,对于列表和字典,参数传递的方式是引用传递。

    def changestring(string1): #修改字符串
        string1 += "None"
    str1 = "I am a good boy!"
    changestring(str1)
    print str1
    def changevar(a): #修改变量
        a += 111
    b = 1
    changevar(b)
    print b

    输出结果为:

    I am a good boy!
    1

    可见,对于字符串以及一般的变量,结果类似于值传递,并不会影响到原结果。那么,如果想改变字符串的值呢?返回新的字符串即可:

    def changestring(string1):
        string1 += "None"
        return string1 #修改后的参数作为返回值
    str1 = "I am a good boy!"
    print id(str1)
    str1 = changestring(str1)
    print str1
    print id(str1)

    输出结果为:

    31869336
    I am a good boy!None
    31867712

    可见,这时的字符串已经不是在原来的基础上修改了,实际上是返回了一个新字符串。

    结论

    对于可以修改的对象,如列表和字典,函数的参数传递方式是引用传递。

    对于不能修改的对象,包括字符串、一般变量和元组(元组本来就不能修改),参数传递的方式是值传递。如果确实需要修改该对象的值,可以利用函数的返回值进行修改。

  • 相关阅读:
    获取Enum枚举值描述的几法方法
    c# 快速验证代理IP是否有用
    解析JSON对象与字符串之间的相互转换
    MVC4相关Razor语法以及Form表单(转载)
    MVC4数据注解和验证
    C#在Json反序列化中处理键的特殊字符
    EasyUI 兼容 IE6 方法总结
    uploadify在IE6下的问题
    Could not resolve dependencies for project, Failed to read artifact descriptor for
    shell 文本单词计数
  • 原文地址:https://www.cnblogs.com/lustar/p/8393922.html
Copyright © 2020-2023  润新知