目录
  • 函数参数如何传递
    • key-value方式传递参数:
    • 动态长度参数传递
  • 参数是否会被函数攥改?
    • 总结

      函数参数如何传递

      key-value方式传递参数:

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

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

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

      show_info('雷学委', '大学生python学习社区长')
      show_info(name='雷学委', title='持续学习协会会长')
      

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

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

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

      动态长度参数传递

      通常使用*加参数名。

      #!/usr/bin/env python
      # -*- coding: utf-8 -*-
      # @time : 2021/10/24 11:39 下午
      # @author : leixuewei
      # @csdn/juejin/wechat: 雷学委
      # @xueweitag: codingdemo
      # @file : func_call.py
      # @project : hello
      def show_info(name, title):
          print("姓名为:", name)
          print("职称为:", title)
      show_info('雷学委', '大学生python学习社区区长')
      show_info(name='雷学委', title='持续学习协会会长')
      def show_info_v2(name, title, *info):
          print("姓名为:", name)
          print("职称为:", title)
          print("其他评价:", info)
      show_info_v2('雷学委', '大学生python学习社区区长', "热爱技术", "热爱生活")
      

      运行效果如下:

      参数是否会被函数攥改?

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

      #!/usr/bin/env python
      # -*- coding: utf-8 -*-
      # @time : 2021/10/24 11:39 下午
      # @author : leixuewei
      # @csdn/juejin/wechat: 雷学委
      # @xueweitag: codingdemo
      # @file : func_call.py
      # @project : hello
      def compute_v1(list):
          sum = 0
          for x in list:
              sum += x
          list = list + [sum]
          print("新地址:", id(list))
          return sum
      def compute_v2(list):
          sum = 0
          for x in list:
              sum += x
          list[0] = list[0] * 100
          return sum
      _list = [1, 2, 3, 4, 5]
      print("调用计算函数v1之前:", _list)
      print("调用计算函数v1之前内存地址:", id(_list))
      print(compute_v1(_list))
      print("调用计算函数v1之后:", _list)
      print("调用计算函数v1之后内存地址:", id(_list))
      _list = [1, 2, 3, 4, 5]
      print("调用计算函数v2之前:", _list)
      print("调用计算函数v2之前内存地址:", id(_list))
      print(compute_v2(_list))
      print("调用计算函数v2之后:", _list)
      print("调用计算函数v2之后内存地址:", id(_list))
      

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

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

      下面是运行结果:

      总结

      本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注www.887551.com的更多内容!