本文将探索:
![5806afe5363355029b21a5bf7361d07a.png](https://i-blog.csdnimg.cn/blog_migrate/452ef1ef6be9ed66479582ce063cd460.jpeg)
注:本节内容,狠重要!
【探索内容】
查阅文档时,我们通常会发现如下图函数后面的括号里有一堆东西,对于小萌新来说,括号里的东西实在让人头大,实际上,这些东西就是函数的参数,其实这非常酷,对于调用函数的人来说,知道函数功能,写下函数名字,如何传递正确的参数,以及函数将返回什么样的值就够了,至于函数内部复杂逻辑,完全封装在函数体,调用者无需了解。
![b0fddd51238cafc1241a9f0fe5c3fbf5.png](https://i-blog.csdnimg.cn/blog_migrate/9758ef7bd20cedde48fbe57d604ccee2.jpeg)
本节我们就来探索一下函数的参数,知道如何使用他们~根据不同的需求,来选择一个或多个函数参数(必选参数,默认参数、可变参数、关键字参数和命名关键字参数)使得函数更灵活,代码更优雅。进入正题:
1.没有任何参数的函数:
先来看看最简单的情况,函数没有参数:
def
![46f0550ce8dcb95d29319165d5a075d8.png](https://i-blog.csdnimg.cn/blog_migrate/8b27bf458ebede2d7487a753cd044c91.jpeg)
在语法上,函数没有参数是可以的,但需注意函数名字(如上述函数hello)后面的括号不能省略,调用函数时,只需写上函数名与空括号。
2.位置参数
def
对于add(x, y)函数,参数x, y就是位置参数,调用函数时,传入的两个值2及7按照位置顺序依次赋给参数x和y。
注:当我们调用add(x, y)函数时,必须传入两个参数,否则会报错:
![6696ba199223b0542447e00eac375a66.png](https://i-blog.csdnimg.cn/blog_migrate/19b9e154e3fa57a041d52fb42196c359.jpeg)
3.默认参数
如果我们需要计算一个数字与固定数字7的和,每次调用函数都传入2个参数,太麻烦了,那默认参数就可以帮我们解决这个问题:
def
试试将第一行代码改为 def add(x, y = 7):运行效果如何?
注:必选参数在前,默认参数在后,否则Python的解释器会报错。
栗子二:
统计某班学生信息,定义函数student,其中年龄默认为18岁,性别默认为1;狗蛋儿同学年龄及性别与默认不符,则传入参数时候,将狗蛋的实际年龄及性别传入即可:
def
![2e0d74b1fb783493dd1dd2e4fe93b050.png](https://i-blog.csdnimg.cn/blog_migrate/c62c772d9331985974887431098ff3b9.png)
如果有一只猪猪同学年龄只是性别与默认不符合,则调用函数时可写为:
student
重要警告: 默认值只会执行一次。这条规则在默认值为可变对象(列表、字典以及大多数类实例)时很重要。比如,下面的函数会存储在后续调用中传递给它的参数:
def
![93f681dac7ee8ca9d7db3235faf6a042.png](https://i-blog.csdnimg.cn/blog_migrate/0f65688507334a730d8c208be4016bf5.jpeg)
如果你不想要在后续调用之间共享默认值,你可以这样写这个函数:
def
![2dfc599b912c7463a1be19898722aa9b.png](https://i-blog.csdnimg.cn/blog_migrate/4d77f76623f5c467e932af5cbcc268d8.jpeg)
大白话:定义默认参数必须指向不变对象!
4.可变参数:可变参数在函数调用时自动组装为一个tuple
可变参数即传入的参数个数是可变的。如下述栗子,我们想计算一些数的和,但是在编写函数时,我们并不知道这些数的个数:
def
可变参数语法:在参数numbers前面加了一个*号。在函数内部,调用该函数时,可以传入任意个参数(包括0个参数),参数numbers接收到的是一个tuple。
如果已有一个list或者tuple,要调用一个可变参数:
nums
*nums表示把nums这个list的所有元素都作为可变参数传进去。
t
5.关键字参数:关键字参数在函数内部自动组装为一个dict
关键字参数可以扩展函数的功能。在函数student里,定义的参数有name和ID,age ,gender ,然而,若调用者愿意提供更多的参数,我们可利用关键字参数接收到(如增加了皮浪同学的参数爱好)。
def
![e7d6110e8dc3a07a18e4daaa59721225.png](https://i-blog.csdnimg.cn/blog_migrate/edd98f13e77f1c82aa8aeb67663761f0.jpeg)
当然,关于皮浪同学的调用还可以这样写:
extra
6.命名关键字参数
在关键字参数中举的例子,有些娃可能会提供额外信息,比如一些娃可能还会提供自己的头发是长的短的等,而这些信息我们并不想获得,如我们只想获得爱好,可以这样写:
def
![65c222a84bbebffd19d95ca083bd20e4.png](https://i-blog.csdnimg.cn/blog_migrate/43a1c534a2fd73f5088c425d1215c4a1.png)
命名关键字参数语法需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。
注:虽然关键字参数和命名关键字参数听起来很像,但是记忆时,可将它们当成没有一丁点关系来记忆。别问我为啥~
此外,如果传入了我们不想要的信息,会报错~试试将第8行代码改为:
student
瞅瞅运行结果~
7.参数组合
python中,如果函数有多种参数,则参数定义的顺序必须是:必选参数(即上文提到的位置参数)、默认参数、可变参数、命名关键字参数和关键字参数。
此处不做过多叙述,在勤练和时间同学的帮助下,可将上述各种参数搞清,此处自会打通任督二脉~
【补充】
1.形参和实参区别
形参 是指出现在函数定义中的名称,而 实参 则是在调用函数时实际传入的值。 形参定义了一个函数能接受何种类型的实参。 例如,对于以下函数定义:
def
在上述函数test里,x,y均为形参,调用函数test(2, 7),2与7均为实参。
【挑战】
1.编写一个函数,调用函数,计算一个数2次方。
2.编写一个函数,调用函数,计算一个数3次方。
3.编写一个函数,调用函数,计算一个数n次方。