zoukankan      html  css  js  c++  java
  • python的参数传递

    1.变量是对对象的引用,对象的操作都是通过变量来完成的

    2.赋值操作是把名字和对象关联起来 

    3.参数的传递本质上就是赋值操作

    理解:

    在c系列语言中,参数的传递方式有值传递与引用传递,而python的参数传递方式是赋值传递,或者称为对象的引用传递。python里的所有数据类型都是对象,所有参数传递时,只是让新变量与原变量指向相同的对象而已,并不存在值传递与引用传递的说法。

    示例如下

    def func(d):
    2     d['a'] = 10
    3     d['b'] = 20
    4     d = {'a':1, 'b':2}
    5     print(d)  #输出{'a':1, 'b':2}
    6 
    7 d = {}
    8 func(d)
    9 print(d)  #输出{'a': 10, 'b': 20}

    在上面的代码中,当我们将d传给func时,func里面的d与外面的d指向的是同一片内存。相当于一开始d={},存放{}这份空间只有d这一个便利贴,但是func(d)的时候,这份空间又多了一个便利贴。尽管都叫d,但一个是全局变量d,一个是函数的参数d。

    当d['a'] = 10和d['b']=20的时候,由于字典是可变类型,所以外面的d也被修改了,此时外面的d和函数里面的d都指向了{'a': 10, 'b': 20}, 但是当d = {'a': 1, 'b': 2}的时候,这是属于赋值。因此python会在内存中再开辟一份空间,空间存放{'a': 1, 'b': 2},然后让函数里面的局部变量d指向它,相当于将原本位于{'a':10,'b':20}上的便利贴撕下来,贴在了另一块空间。但这只是函数里面的d,对外面的d是没有影响的,所以外面的d依旧是{'a': 10, 'b': 20}。

  • 相关阅读:
    原生内存泄漏检测
    安卓适配
    游戏里的动态阴影-ShadowMap实现原理
    游戏里的跨地图寻路算法
    Unity-Shader-动态阴影(上) 投影的矩阵变换过程
    Unity-奥义技能背景变黑效果
    UGUI学习笔记
    Unity-Shader-镜面高光Phong&BlinnPhong-油腻的师姐在哪里
    Unity-Shader-光照模型之漫反射
    Unity3D-Shader-热扭曲效果
  • 原文地址:https://www.cnblogs.com/zhangtq/p/10671476.html
Copyright © 2011-2022 走看看