您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:浅谈Python中的函数传递问题

51自学网 2022-02-21 10:48:10
  python
这篇教程浅谈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学习社区长')

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

在这里插入图片描述

动态长度参数传递

通常使用*加参数名。

#!/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 : hellodef 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 : hellodef compute_v1(list):    sum = 0    for x in list:        sum += x    list = list + [sum]    print("新地址:", id(list))    return sumdef 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之前重新复制那次)

下面是运行结果:

屏幕快照 2021-10-31 下午10.34.46.png

总结

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


Python划分数组为连续数字集合的练习
python爬虫之requests库的使用详解
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。