0 总述
这个题目分为2篇,第一篇基本上是概念以及实例,有个相对系统的认识,第二篇想写的深入一些,不同参数类型的区别以及和c/c++的函数参数对比下异同~下面开始是第一篇的内容啦~
Python中的函数参数一共分为5种类型,分别是:
- 必须参数
- 默认参数
- 可变参数(不定长参数)
- 关键字参数
- 组合参数
其中必须参数和默认参数是我们日常码代码中定义函数最常使用的函数参数,下面我们通过几个例子来了解他们吧!
1 必须参数
作为第一个例子,当然首选是hello word啦~
def say(words):
print("say is ",words,)
say("Hello World!")
say()
我们可以从上述say函数中发现,words作为一个行参,调用时传入了一个“Hello World!”字符串,那么words的类型也是字符串。因此行参的类型取决于传入的实参的类型。那么可不可以不传入参数,直接调用这个函数呢?就会看到下面的报错信息:
为什么会报错呢?什么是必须参数呢 ? 主要是特征是在调用时必须传入与定义一致数量的参数,不能多也不能少,如果按照要求传入参数就会报错啦~
那么又有个新的问题,如果我比较懒,想在不穿入参数的情况下(同时也能完成字符串打印功能),也打印hello word呢?就可以学习下下一种参数类型啦~
2 默认参数
看下面的例子一,就可以完成不穿入参数也完成打印hello word的功能啦
#例子一:
def say(words="Hello World!"):
print("SAY:",words)
#函数调用
say("Hello World!")
say()
从函数定义可以看出,函数形参words被赋了一个值"Hello World!",在调用时,可以传入一个新的实参,同时也可以不传入使用默认值。默认参数的优点在于对于一些参数,可以给其预设一些默认的值,这样在调用时只需要传入必要的参数即可,简化调用。
下面的再来个例子,我们巩固一下默认参数:
# 定义函数
def robot_marry(male_name, female_name = "eva"):
print(male_name + " and " + male_name + " are friend.")
# 调用方式1:第一个参数使用传入的参数
robot_marry("wali" , "eva")
# 调用方式2,第二个参数使用默认值
robot_marry("wali")
如果我想打印的,小蟑螂和wali,eva是好朋友呢,难道只能给函数再加一个形参吗?
3 可变参数
可变参数,什么东西可变呢? 是参数的个数是可变的,这个比较有趣,函数定义后,我可以按需传入设定数量的参数,当我们不是很确定参数的个数,或者说参数个数会发生变化的时候,就可以用可变参数,可变参数可以连续传入多个参数,最常用的可变参数的函数,就是我们的print函数啦~
下面的例子就可以打印wali , eva , small cockroach , are friend啦
# 定义函数
def robot_friend(*robot_name):
for name in robot_name:
print(name + ", ",end='') #python3
print('are friend')
# 调用方式1:第一个参数使用传入的参数
robot_friend("wali" ,"eva", "small cockroach
再来个例子巩固一下,比如:双十一来了,我们需要买好多东西,但买啥,买多少我们并不确定,这个时候我们也可以用可变参数
# 函数定义
def buy(*things):
print("You have buy:")
for thing in things:
print(thing)
# 函数调用:可以写入任意数量个参数
buy("red-shoe","coat","trousers","hat")
通过上述函数可以发现,我们在定义时仅仅在参数前加了个*号,带来的效果时我在使用时可以通过things获取到传入多个参数中的每一个参数。因此简单来说,可变参数本质为任意数量个数的参数的容器,可以容纳无限个参数。
4 关键字参数
当我们定义的函数中有很多参数,其中一些有默认值,我们在调用时只想传入某一些参数,而这些参数又不是都在前面,这个时候使用关键字参数能摆脱使用位置对应行参的约束,使得代码很简洁。如以下例子所示:
def number_add(a , b = 3, c = 4 , d =5 ,e = 6):
print("sum is ", a+b+c+d+e)
我们在调用时,首先a使用的为必须参数,因此必须传入一个实参,b,c,d假设我并不想改变,只想改变e,这时我们有两种办法:
number_add(10,3,4,5,7)#方法1
number_add(10,e=7)#方法2
方法2通过行参名加上赋值的方式,跳出了位置约束,使得代码很简洁,对于这些默认参数很多,而调用时只想改变很少一部分的应用,非常有效。
5 组合参数
组合参数就是将以上描述的4种参数中的两个及以上同时引入函数作为行参,但参数的位置顺序必须准照以下规则:必须参数、关键字参数、默认参数、不定长参数