浅谈Python中的函数传递问题

时间:2022-11-24 16:56:37

函数参数如何传递

key-value方式传递参数:

下面是非常常见的传递方式,参数名写直白,写死了:

def show_info(name, title):
  print("姓名为:",name)
  print("职称为:",title)

我们在使用的时候可以用以下的方式:

  1. show_info('雷学委''大学生Python学习社区长'
  2. show_info(name='雷学委', title='持续学习协会会长'

可以写成这样,使用两个*,这样非常灵活,但是缺点也是明显的(结构灵活有时候需要判断是否漏传,直接取容易出错)

  1. def show_info_v2(**kv_dict): 
  2.   print("姓名为:", kv_dict['name']) 
  3.   print("职称为:", kv_dict['title']) 
  4. show_info_v2(name='雷学委', title='大学生Python学习社区长'

下面是效果,看起来一样的。

浅谈Python中的函数传递问题

动态长度参数传递

通常使用*加参数名。

  1. #!/usr/bin/env python 
  2. # -*- coding: utf-8 -*- 
  3. # @Time : 2021/10/24 11:39 下午 
  4. # @Author : LeiXueWei 
  5. # @CSDN/Juejin/Wechat: 雷学委 
  6. # @XueWeiTag: CodingDemo 
  7. # @File : func_call.py 
  8. # @Project : hello 
  9. def show_info(name, title): 
  10.   print("姓名为:", name) 
  11.   print("职称为:", title) 
  12. show_info('雷学委''大学生Python学习社区区长'
  13. show_info(name='雷学委', title='持续学习协会会长'
  14. def show_info_v2(name, title, *info): 
  15.   print("姓名为:", name) 
  16.   print("职称为:", title) 
  17.   print("其他评价:", info) 
  18. show_info_v2('雷学委''大学生Python学习社区区长'"热爱技术""热爱生活"

运行效果如下:

浅谈Python中的函数传递问题

 

参数是否会被函数攥改?

我们看看下面的程序即可:

  1. #!/usr/bin/env python 
  2. # -*- coding: utf-8 -*- 
  3. # @Time : 2021/10/24 11:39 下午 
  4. # @Author : LeiXueWei 
  5. # @CSDN/Juejin/Wechat: 雷学委 
  6. # @XueWeiTag: CodingDemo 
  7. # @File : func_call.py 
  8. # @Project : hello 
  9. def compute_v1(list): 
  10.   sum = 0 
  11.   for x in list: 
  12.       sum += x 
  13.   list = list + [sum] 
  14.   print("新地址:", id(list)) 
  15.   return sum 
  16. def compute_v2(list): 
  17.   sum = 0 
  18.   for x in list: 
  19.       sum += x 
  20.   list[0] = list[0] * 100 
  21.   return sum 
  22. _list = [1, 2, 3, 4, 5] 
  23. print("调用计算函数v1之前:", _list) 
  24. print("调用计算函数v1之前内存地址:", id(_list)) 
  25. print(compute_v1(_list)) 
  26. print("调用计算函数v1之后:", _list) 
  27. print("调用计算函数v1之后内存地址:", id(_list)) 
  28. _list = [1, 2, 3, 4, 5] 
  29. print("调用计算函数v2之前:", _list) 
  30. print("调用计算函数v2之前内存地址:", id(_list)) 
  31. print(compute_v2(_list)) 
  32. print("调用计算函数v2之后:", _list) 
  33. print("调用计算函数v2之后内存地址:", id(_list)) 

这里两个compute函数,一个修改参数引用地址,一个并没有修改参数引用而是修改了引用内存空间的关联地址(一个变量)的值。

可以说它们都成功了。但是外面的_list 的地址是任何时候都不会被修改的,除非赋值新地址(也就是在调用v2之前重新复制那次)

下面是运行结果:

浅谈Python中的函数传递问题

 

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注服务器之家的更多内容!

原文链接:https://blog.csdn.net/geeklevin/article/details/121368864