浅谈Python中的函数传递问题

目录

函数参数如何传递

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学习社区长\')

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

浅谈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学习社区区长\', \"热爱技术\", \"热爱生活\")

运行效果如下:

浅谈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之前重新复制那次)

下面是运行结果:

浅谈Python中的函数传递问题

总结

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

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容