zoukankan      html  css  js  c++  java
  • Python中的引用传参

    Python中函数参数是引用传递(注意不是值传递)。对于不可变类型,因变
    量不能修改,所以运算不会影响到变量自身;而对于可变类型来说,函数体
    中的运算有可能会更改传入的参数变量。

    引用传参一:

    >>> a = 100 #这里的a是不可变类型
    >>> def test(a):
    ...     a+=a 
            #这个式子有两层含义:1.这里可能是重新定义一个新的变量a,2.也有可能是修改a的值,但由于全局
            #变量a不能修改,所以此处是重新定义了一个a;
    ...     print("函数内:%d"%a)
    ...
    >>> test(a)
    函数内:200
    >>> print(a)
    100

    引用传参二:

    >>> a = [100] #这里的a是一个列表,是可变类型
    >>> def test(a):
    ...     a+=a #由于列表a是可变类型,所以这里是修改a
    ...     print("函数内:")
    ...     print(a)
    ...
    >>> test(a)
    函数内:
    [100, 100]
    >>> print(a)
    [100, 100]

    引用传参三:

    >>> a = 100
    >>> def test(a):
    ...     a=a+a  #最初为了好理解,所以可以认为a+=a等价于a=a+a,所以这里同引用传参一
    ...     print("函数内:%d"%a)
    ...
    >>> test(a)
    函数内:200
    >>> print(a)
    100

    引用传参四:

    >>> a = [100]
    >>> def test(a):
            #1. 先算 =号右边的
            #2. 算出来的结果是[100,100]
            #3. a = [100,100]
            #4. 让a变量指向了[100,100],即a保存的是[100,100]的引用(内存地址)
    ...     a=a+a #对于这种情况,等号左边的a是重新定义的一个量,此时a=a+a与a+=a不一样
    ...     print("函数内:")
    ...     print(a)
    ...
    >>> test(a)
    函数内:
    [100, 100]
    >>> print(a)
    [100]

    事实上,我们可以通过打印相应变量的地址来帮助我们理解,例如:

    a是int类型的情况:

     

    a是列表的情况:

  • 相关阅读:
    GOLANG之学习类库-mysql
    GOLANG学习之类库-goconfig
    PHP进程实现方式之死循环(一)
    PHPexcel之读取表格(三)
    PHPExcel之生成表格汇总列(二)
    GOLAND常用基本命令介绍
    PHPExcel之生成xlsx并下载(一)
    nginx之版本升级方法一
    php linux yaml 的安装和使用
    【Go语言学习笔记】Go的defer
  • 原文地址:https://www.cnblogs.com/yxtz271828/p/8988176.html
Copyright © 2011-2022 走看看