小知识,大挑战!本文正在参与「程序员必备小知识」创作活动
本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。
正式的Python专栏第25篇,同学站住,别错过这个从0开始的文章!
前篇讲了python中的函数和高阶函数,这篇再把函数的其他部分补充一下,稍微轻松简单一些。
函数参数传递
key-value方式传递参数:
def show_info(name, title):
print("姓名为:",name)
print("职称为:",title)
我们在使用的时候可以用以下的方式:
show_info('雷学委', '搬砖大师')
show_info(name='雷学委', title='搬砖大师')
动态长度参数传递
def show_info_v2(name, title, *info):
print("姓名为:", name)
print("职称为:", title)
print("其他评价:", info)
show_info_v2('雷学委', '搬砖大师', "热爱技术", "热爱生活")
参数是否会被函数攥改?
我们看看下面的程序即可:
#!/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之前重新复制那次)
下面是运行结果:
其他 - Immutable 参数
如果传入不可串改的数据类型,那么尽管是基于引用关联地址来修改值(禁止写),比如传入一个由基础数据类型元素构成元组tuple作为参数,在调用函数中修改是被禁止。 Python运行的时候会提示错误!
对了,喜欢Python的朋友,请关注学委的 Python基础专栏 or Python入门到精通大专栏
持续学习持续开发,我是雷学委!
编程很有趣,关键是把技术搞透彻讲明白。
欢迎关注微信,点赞支持收藏!