最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

python函数参数的不同

来源:动视网 责编:小采 时间:2020-11-27 14:24:10
文档

python函数参数的不同

python函数参数的不同:在运用php.cn/wiki/1514.html target=_blank
推荐度:
导读python函数参数的不同:在运用php.cn/wiki/1514.html target=_blank


在运用php.cn/wiki/1514.html" target="_blank">python的过程中,发现当函数参数为list的时候,在函数内部调用list.append()会改变形参,与C/C++的不太一样,查阅相关资料,在这里记录一下。

python中id可以获取对象的内存地址

>>> num1 = 10>>> num2 = num1>>> num3 = 10>>> id(num1)4299190320>>> id(num2)4299190320>>> id(num3)4299190320

可以看到num1、num2、num3三个对象指向的是一个地址,python在这里采用的是一种叫做引用计数的方式来完成的,很类似C++zhong的智能指针,变量赋值给变量相当于同一对象引用计数器+1,而不是重新分配空间。

对于list对象可以看到下面的结果:

>>> list1 = [,>>> list2 = [,>>> >>> 4302498128

list1与list3指向同一空间,list2指向另外的一处地址。

python中的函数传参是对象传递,同时也存在局部与全局的问题,在传参过程中存在两个规则:

  • 通过引用将参数复制到局部作用域的对象中,意味着被用来访问函数参数的变量于提高给函数的对象无关,因为存在一个复制问题,这和C语言是相同的。而且修改局部对象不会改变原始数据。

  • 可以在适当位置修改可变对象。可变对象主要就是列表和字典,这个适当位置实质上就是前面分析的局部子对象的修改不会改变字典对象或者列表对象的ID

  • def incrInt(num):
     pId(num)
     num += 1;
     pId(num)def incrList(listArg):
     pId(listArg)
     listArg.append(1);
     pId(listArg)def pId(arg): print id(arg)
    num1 = 10pId(num1)
    incrInt(num1)print(num1)
    
    list1 = [0,2]
    pId(list1)
    incrList(list1)print(list1)

    结果如下:

     python test.py42991819044299181904429918188010433697991243369799124336979912[0, 2, 1]

    可以看到在函数内部,改变int的数值,则num指向了另一块内存地址,而修改list,则是在同一块内存地址。

    在python中,对象可分为可变(mutable)和不可变(immutable)两种类型,元组(tuple)、数值型(number)、字符串(string)均为不可变对象,而字典型(dictionary)和列表(list)的对象是可变对象。

    所以在传参过程中要注意下。

    文档

    python函数参数的不同

    python函数参数的不同:在运用php.cn/wiki/1514.html target=_blank
    推荐度:
    标签: 不同 的区别 参数
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top