python学习分享之函数参数详解-有趣的形参与实参

大家好,我是小眼睛优粥面,今天跟小伙伴聊天的时候说到python的函数,大家说python函数的参数形式简直太多了,有时候记起来慢,用起来又有点乱,什么关键字参数、序列实参、不定形参巴拉巴拉的一大堆。正好今天简单总结下python函数形参与实参的几种奇妙用法,欢迎大家交流分享(码字不易,希望大家标明出处),有不对的地方也请大家指正,万分感谢啦^ ^ 

也希望大家关注我的微信公众号 “记不住先生和忘不了小姐”,里面不光有 “记不住” 的技术还有那 “忘不了” 的情怀。

0. 文章目录

目录

0. 文章目录

1. 函数的定义

2. 函数的实参

2.1. 位置实参

2.2. 关键字实参

2.3. 序列实参

2.4. 字典实参

3. 函数的形参,约束实参的传递方式

3.1. 位置形参

3.2. 默认形参

3.3. 不定长形参

3.3.1. 星号元组形参

3.3.2. 双星号字典形参

3.4. 命名关键字形参

3.5. 形参的位置关系

4. 函数参数的总结


1. 函数的定义

首先,说到函数的参数,我们有必要先回忆一下什么是函数?函数一段具有特定功能,与主程序相隔离,且易于复用的程序代码。(重点的理解标注的内容)。

同时,以至于函数是如何调用的、函数的形参、实参是什么,这些内容不一一详细赘述,就是长成以下这个样子。

# 函数定义,用于封装一个特定的功能,表示一个功能或者行为。
def func_name(形式参数):
    函数体

# 函数调用,函数是可以重复执行的语句块,可以重复调用。
func_name(实际参数)

2. 函数的实参

2.1. 位置实参

那么,我们就先从实际参数开始聊起吧,位置实参最为简单也最常见一种实参形式,所谓位置实参就是实参与形参的位置依次对应,就如张导电影的名字一样《一个也不能少》,同样,一个也不能多,就像这样:

def func_name(p1, p2, p3):
    print("p1:", p1)
    print("p2:", p2)
    print("p3:", p3)

# 函数调用:位置形参必须按照位置顺序传递参数
func_name(1, 2, 3)

'''
输出结果:
p1: 1
p2: 2
p3: 3
'''

2.2. 关键字实参

关键字实参:实参按照名称与形参进行对应,这个也很好理解,传参的时候加上“形参名”即可。什么意思呢?其实就是在告诉你函数的 “调用者” 给你 “制作者” 传递信息时不用再按照 “位置关系” 一一对应,可以按照名字(关键字)去对应啦,既然这样那他自然就可以改变传参的位置了。就像这样:

def func_name(p1, p2, p3):
    print("p1:", p1)
    print("p2:", p2)
    print("p3:", p3)

# 函数调用:关键字形参可以不按顺序传递
func_name(p2=1, p3=3, p1=2)

'''
输出结果:
p1: 2
p2: 1
p3: 3
'''

好吧,不知道你们看到这里有没有疑惑,它有啥用呢?我们平时写代码的时候难道就按照 “位置” 去传递参数不香吗?而且写得内容还少,何必罗里吧嗦的去写这么一大堆关键字呢?恩,你想的没错,这个不是他应用的重点,这块留个疑问,你继续看,我们到后面会讲到。

2.3. 序列实参

序列实参是用序列容器的思想去进行传参,python容器都有哪些是有序的呢?我们都知道有 “字符串、列表、元组”,Python中可以把实参用 * 号将序列容器拆解,将元素与形参依次对应。这块重点在拆分,即将实参按照位置进行拆分给函数。注意:序列实参传参的时候要遵循位置关系,还是那句话 “一个也不能多,一个也不能少”,其实他还是 “位置实参” 的一个扩展的高级应用,如下面所示:

def func_name(p1, p2, p3):
    print(p1, p2, p3, sep=",")

# 将实参用*将序列容器拆解后与形参的位置依次对应
str_data = "123"
func_name(*str_data)

list_data = [4, 5, 6]
func_name(*list_data)

tuple_data = (7, 8, 9)
func_name(*tuple_data)

'''
输出结果:
1,2,3
4,5,6
7,8,9
'''

2.4. 字典实参

上面说完了 “序列实参” ,那对应的势必会有 “散列实参” 的容器传参,python中字典就是无序的散列,那就是 “字典实参” ,Python中可以将实参用 ** 将字典拆解后与形参的名字进行对应。重点还是在拆分上。同样,字典实参需要根据键值对与名字相对应,类似于上面讲的 “关键字实参”,所以关键字实参有的特性它都有,如不按照顺序传递等等,直接上代码吧。

def func_name(p1, p2, p3):
    print("p1:", p1)
    print("p2:", p2)
    print("p3:", p3)

dict_data = {'p3':3, 'p1':1, 'p2':2}
func_name(*
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值