python形参中传入两个实参_零基础:Python世界大冒险之优雅的参数

cc4f39c8dededcebe8e43d6455aceb19.png

2021 年新年的钟声已经敲响,勇士在 Python 大世界中的第一个新年是在函数城度过的。函数城是一个很大很大的城邦,在这里有各种稀奇古怪的事情。只要是在这里待过一段时间的人,都会因为这一段经历而终生难忘。

勇士上一次和小姐姐的偶遇中,已经明白了基本的函数用法,了解了函数参数、返回值等概念。

但是函数中的参数在传递的时候,有各种各样的用法。比如关键字参数,可变参数等。

b5acc347-e04e-eb11-8da9-e4434bdf6706.svg b7acc347-e04e-eb11-8da9-e4434bdf6706.svg

关键字参数

b9acc347-e04e-eb11-8da9-e4434bdf6706.svg baacc347-e04e-eb11-8da9-e4434bdf6706.svg 0065483ed737ce2028930c56faa44bdd.png

这不,勇士这就遇到了一个函数

def func(name, age='18'):
     print(name + age + "岁啦。")
     
 func('小阿狸')# 小阿狸18岁啦。
 func('小阿狸', '19')# 小阿狸19岁啦。

勇士发现,在这个函数中有两个参数,并且定义函数的时候将第二个参数进行了赋值。

当调用函数时,需要将实参传递给未被赋值的第一个形参,而第二个参数会使用被定义的值进行打印。当某一个频繁使用的参数为一个固定的值的时候,就可以在定义时先将这个参数赋值。这样在调用时就可以少传一个参数。

但是当这个值需要修改时,我们直接将需要的实参传入调用函数即可,新传入的值会将旧的值替换。

勇士看着这个函数的方法,自己也尝试打了一套函数。

def my_func(name='勇士', age):
     print(name + age + '岁啦。')
     
 my_func('19')
 # 调用函数报错...
 # SyntaxError: non-default argument follows default argument勇

勇士感到有些疑惑,每次我一上手写代码就会报错,心态都要爆炸啦。不过勇士读懂了这个报错原因,原来是非默认参数跟在了默认参数的后面。这个函数在定义的时候,将默认的参数 name 放在了第一个的位置。这里只需要将两个参数的位置进行调换就好啦,并且将默认的参数放在最后,非默认参数一律往前靠。

def func2(name, age='18', addr='BeiJing'):
     print(name + age + '岁啦。')
     print(name + '的地址是' + addr)
     
 func2('小阿狸')# 小阿狸18岁啦。小阿狸的地址是BeiJing

 func2('小阿狸', addr='ShangHai')# 小阿狸18岁啦。小阿狸的地址是ShangHai

如果在定义函数时有多个默认参数,并且在调用时只想改变其中某几个的值。就可以在调用时将这几个值单独拿出来直,接重新定义即可。

这里在第二次调用函数时,直接修改了第三个默认参数的值,但是并不影响第二个参数的使用。也可以实现我们想要的结果,只是在定义函数的时候要记清楚,默认参数需要放在最后的位置哦。

可变参数

勇士感觉 Python 大世界这样传参数的方法真优雅,一边走一边想,那函数定义者怎么知道我传入几个参数呢?

说来话巧,不远处,勇士看到了上次遇到的小姐姐,赶紧上前打招呼。小姐姐也看到了勇士,俩人互相问好,勇士及时向小姐姐提出了心中的疑问。

小姐姐解释说:在函数中其实有一种参数叫做可变参数,这种参数可以接收任意多的变量哦。

勇士感到特别好奇,不是一个参数接收一个参数嘛。这下可学到宝了。

小姐姐说着给勇士演示了一段代码

def f1(normal, *args):
     print('normal' = normal)
     print('args' = args)
     
 f1(1,2,3,4,5)
 # 结果打印
 # normal = 1
 # args = (2, 3, 4, 5)
看到结果,勇士目瞪口呆,着实被 Python 世界的优雅震惊到了。耳边只传来小姐姐的声音。

勇士你看,在定义函数的时候,第一个参数是普通参数,第二个参数 args 前有一个 * 号,这样在调用函数时,会将多个实参的第一个值给参数 normal,而剩下的所有值,都会传递给带 * 的参数 args,并且以元组的形式存储在变量 args 中。

听完小姐姐的解释,勇士心中的疑惑好像解开了那么一点点。但是还在嘀咕:真神奇呀真神奇。既然这个变量是一个数组的话, 我肯定也可以用 for 循环来遍历它。

得到了小姐姐的肯定,勇士的心中特别激动。小姐姐又给补充道:如果这个变量是两个 * 号呢?

勇士的嘴巴张得更大了,半天吐出几个字,我吃不消了。

小姐姐偷偷笑了起来,接下来的这个也很简单呢。我们再一起看一下吧。

def f2(normal, *args, **kwargs):
     print(normal)
     for i in args:
         print(i)
     for key, value in kwargs.items():
         print(key + '=' + value)
         print('------value-----')
     print(type(args))
     print(type(kwargs))

勇士看到这一串函数,又看到了以前见过的键值对 keyvalue ,原来两个 * 的参数是一个字典呀。勇士激动的直拍大腿,心中一阵窃喜,原来自己这么聪明。

果不其然,勇士开始调用这个函数

f2(1, 2, 3, key1='1', key2='2', key3='3')
 
 # 输出
 # 1
 # 2
 # 3
 # key1=1
 # key2=2
 # key3=3
 #
 #

勇士看到输出结果顿时明白了。连忙向小姐姐道谢,小姐姐真是自己生命中的贵人。让自己搞懂了这么多新东西,于是向小姐姐发出邀请,一起去喝奶茶。得到肯定的回答后,两人一起朝着奶茶店走去,消失在函数城的人海中。

勇士加油! PS:勇士都有小姐姐了,你还不来抽奖吗?后台回复【 算法 】即可抽取新年礼物哦

更多文章

d71082508ea7af4b47e2bc396e6bedcb.png零基础:Python 世界大冒险之函数城零基础:Python世界大冒险之数据结构部落零基础:Python世界大冒险之字典村零基础:Python世界大冒险之列表村小记 题图来源:pixabay.com c2f146bb0ee072fae26aa15d920d87bd.png

点个在看 你最好看

079dc24ba68f340d3497126a56bedd33.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值