zoukankan      html  css  js  c++  java
  • python中的参数传递和返回值

    python中的参数传递类似java,有着自己的内存回收机制,这和C++有着很大的差别。

    1.函数的参数传递:

    >>> a = [1, 2, 3]
    >>> def fun(a):
            for i in a:
                print i
    a.append(4)
    >>> fun(a) 1 2 3 44807792 >>> a [1, 2, 3, 4]

    从上面的结果可以看出,python的函数传递是引用传递,因此,在函数体内修改对象内容会导致函数外面的对象内容改变。

    这个对于一些内置类型,如int,float是不成立的。

    注意,如果在函数内对传进来的参数做del操作是不会对实际对象产生影响的,因为del删除的是该引用,而实际对象的引用数至少为1,所以不会被回收。

    2.函数的返回:

    >>> def fun():
            a = [1, 2, 3]
            print id(a)
            return a
    >>> a = fun()
    44806192
    >>> id(a)
    44806192
    >>> def fun():
            a = 1
            print id(a)
            return a
    >>> a = fun()
    34243104
    >>> id(a)
    34243104

    可以看出,函数返回的也是对象的引用,而对象此时的引用计数为1,所以不会被内存回收。

    这在C++中是肯定错误的,但是python有自己的内存回收机制,因此是没问题的。

    3.总结:

    python和java类似,没有指向对象的指针,每个对象都是靠引用对其进行操作,因此在函数传递和函数返回时,通过对同一个对象的引用实现了对同一个对象的操作。当函数调用结束时,对象的内存不会消失,但是引用本身会被回收。

  • 相关阅读:
    430flash的操作
    430单片机之定时器A功能的大致介绍
    MSP430看门狗
    430之通用异步串口通信模块
    430的启动,I/O中断
    Msp430概述
    烦躁
    12864密码锁
    单片机的动手实践篇--51单片机玩转12864
    【CSS】font样式简写(转)- 不是很建议简写
  • 原文地址:https://www.cnblogs.com/chybot/p/4558956.html
Copyright © 2011-2022 走看看