Python中函数参数是如何传递的?

发表于:2023-2-23 09:26

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:华科小徐    来源:51CTO博客

  Python函数相比对于多数程序员来说不陌生吧,那么Python函数中的参数是如何传递的呢?首先我将会以代码图文的形式给大家展现以下,看看是不是和您所认知的Python函数一样的结果?
  def test_1(a):
      a = 5
  a = 3
  test_1(a)
  print(a)
  def test_2(l):
      l.append(4)
  l = [1, 2, 3]
  test_2(l)
  print(l)
  # 3 a的值没有发生变化
  # [1, 2, 3, 4] l的值发生了变化
  为什么会出现这样的结果了,带着这个疑问,我们往下学。
  变量赋值
  在我告诉你们Python函数中参数是如何传递之前,我们要先学习一下变量赋值的背后逻辑。我们先看一个简单的代码。
  a = 1
  b = a
  a = a + 1
  我们之前就说过,Python万物皆对象,所以1也是对象,a = 1,其实是创建了1这个对象,让变量a指向了1这个对象,b = a,就表示b也会指向1这个对象。
  a = a + 1后,由于int类型数据是不可变数据类型,所以就创建了一个2的对象,变量a指向2这个对象。
  那列表这种可变数据类型就不一样了。l1和l2都指向了同一个列表对象,当列表对象发生改变时,指向他的变量都会发生改变。
  l1 = [1, 2, 3]
  l2 = l1
  l1.append(4)
  print(l1, l2)
  # [1, 2, 3, 4] [1, 2, 3, 4]
  总结下来说,Python变量赋值就是让变量指向对应的对象,可变对象和不可变对象要区分开来,可变对象发生改变,会影响指向该对象的所有变量,而不可变量则不会。
  Python函数的参数传递
  我先说结论,Python函数的参数传递是对象的引用传递。我们举个例子。
  def test_1(b):
      b = 5
  a = 3
  test_1(a)
  print(a)
  # 3
  根据对象的引用传递,a和b都是指向3这个对象的,在函数中,我们又执行了b = 5,所以b就指向了5这个新对象,但是a还是指向3这个对象,所以a还是3。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号