zoukankan      html  css  js  c++  java
  • 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

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

    结论

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

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

  • 相关阅读:
    云平台架构架构调整路线图
    python3生成测试数据,并写入ssdb
    关于因各种原因,造成LINUX主机不能通过域名访问自己的解决办法
    学习OpenResty编程
    在WINDOWS2008 Server 中创建NFS服务器,使用LINUX的MOUNT命令去加载网络盘
    云平台资源挂盘办法V1.2
    VMware安装Centos7超详细过程(图文)
    VMware配置网络的3种方式:NAT、Host-Only、Bridged
    vmware12安装centos7系统详解
    AMQP && MQTT comparision
  • 原文地址:https://www.cnblogs.com/lustar/p/8393922.html
Copyright © 2011-2022 走看看