资讯专栏INFORMATION COLUMN

python中参数传递

Wildcard / 1083人阅读

摘要:在编程语言中,函数的参数传递有两种情况按值类型传递调用该函数,传入一个变量,其实传入的是该变量的一个副本,该变量在函数中发生变化,不影响函数外面该变量。

在编程语言中,函数的参数传递有两种情况:

按值类型传递

num = 10
def double(arg):
    arg=arg*2
    print(arg)

double(num)
调用该函数,传入一个变量,其实传入的是该变量的一个副本,该变量在函数中发生变化,不影响函数外面该变量。

按引用类型(地址)传递

  def change(arg):
       arg.append("More data")
       print(arg)
  
 saying = [42,34,55]
 change(saying)
调用该函数,传入一个变量,但是函数内部却是维护该变量的一个指向链接,链接到函数外面的这个变量;当传入函数的这个变量在函数内部发生改变,直接影响到外面的最初变量,因为有指向关系。

python中的函数参数既支持按值调用,也支持按引用调用。

python中的变量是对象引用:变量存储的值是内存地址。当函数被调用的时候,解释器会查看传入的变量(内存地址)指的那个指的类型,如果是一个可变类型的值,就按照引用传递变量;如果是一个非可变类型的值,就考虑按照值传递变量。


可变类型:字典dict,列表list,集合set:

传入函数中的变量,函数内部的修改都会反映到函数外面,即最初始的变量会受到影响,毕竟这些初始的变量是可变类型。

不可变类型:字符串srt,整数int,元组trulp:

在这中,函数对变量的任何修改都是函数私有的,不会反映到函数外面,由于这些变量是不可变的,所以不能修改。

例外:

def double(arg):
  print("before: ",arg)
  arg = arg * 2
  print("After: ",arg)

根据上面所说的,为什么这个函数里面的参数,传入的一个可变类型,函数内部发生了改变,结果却没有反映到函数外面呢?

我们考虑到这条语句:arg = arg*2

首先,传入的变量,先执行arg*2,所产生的新的变量(新对象的引用),重新赋值给原先的变量arg,覆盖其原先的引用,导致原先的变量arg与外面初始变量之间的联系断了。既然关系断了,那么函数里面的arg 的改变,没有反映出来,所以并没有影响到函数外面的变量。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41957.html

相关文章

  • python调用python脚本时参数传递

    摘要:前言为什么有调用脚本呢直接不就行了吗这里主要是用于远程调用时这种调用在运维场景中是比较多的,类似下面这样的调用远程调用这里有个问题就是传递较多参数时如何传递比如传递字典传递列表等我们可以发现,如果直接传递,往往传过去后不能很好的解析因为这 前言: 为什么有python调用python脚本呢?直接import不就行了吗?这里主要是用于远程调用时,这种调用在运维场景中是比较多的,类似下面这...

    yankeys 评论0 收藏0
  • 关于函数参数传递,80%人都错了

    摘要:另外说下,函数的返回值,也相当于是一次赋值。只不过,这时候是把函数内部返回值所指向的对象,赋值给外面函数的调用者输出函数结束后,这个标签虽然不存在了,但所指向的对象依然存在,就是指向的新对象。 还记得上一次关于变量作用域文章 : Crossin:全菊变量和菊部变量zhuanlan.zhihu.comshowImg(https://segmentfault.com/img/remote/...

    X_AirDu 评论0 收藏0
  • 【编程语言】Python参数传递、返回值、浅拷贝、深拷贝

    摘要:作者本文原载于,不允许转载的参数传递的参数传递,无法控制引用传递还是值传递。对于不可变对象数字字符元组等的参数,更类似值传递对于可变对象列表字典等,更类似引用传递。 作者:LogM 本文原载于 https://segmentfault.com/u/logm/articles ,不允许转载~ 1. Python 的参数传递 Python的参数传递,无法控制引用传递还是值传递。对于不可变对...

    PascalXie 评论0 收藏0
  • Python函数

    摘要:定义的函数定义使用通过返回执行结果常用内置常用内置函数待补充绝对值计算判断是否是类型列表中的值强制类型转换小数时仅保留整数位强制类型转换编码转换强制类型转换多值的函数是可以返回多值的定义调用可以看到,返回的多值是以形式输出的参数的参数支持默 定义 Python的函数定义使用def def func_name(x): return hello world //通过return 返...

    elisa.yang 评论0 收藏0
  • 讲讲Python的函数传递问题 【文末送书】

    摘要:文末评论送书,学委会用这个抽奖程序来进行严格抽奖,周六晚上点整定时抽奖并视频公布出来,敬请期待。本文讲的函数值传递问题,是写程序经常遇到,特别的是动态参数在高级框架中使用很广泛。 ...

    luckyw 评论0 收藏0
  • Python: 函数参数魔法

    摘要:在调用函数时,我们可以给该函数传递任意个参数,包括个参数传递个参数传递个参数传递个参数传递个参数上面的表示任意参数,实际上,它还有另外一个用法用来给函数传递参数。应该使用不可变对象作为函数的默认参数。 函数参数 在 Python 中,定义函数和调用函数都很简单,但如何定义函数参数和传递函数参数,则涉及到一些套路了。总的来说,Python 的函数参数主要分为以下几种: 必选参数 默认参...

    zxhaaa 评论0 收藏0

发表评论

0条评论

Wildcard

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<