前面学习了函数的一些知识。从参数上来看,函数可以有参数,也可以没有参数;从功能上来看,函数有输出型的,也有返回型的;从名称上来看,函数可以有名称,也可以没有名称。
函数可以分为内置函数和自定义函数。内置函数是可以直接使用的,如下展示了两个常用的内置函数。
len函数,用于获取对象的长度或元素个数。
n = ["love",1,2,6,9]
print(len(n))
type函数,用于查询对象的数据类型。
print (type(1,2,6))
print(type("love")
除了内置函数以外,还学习过自定义函数。定义的函数如果没有设置参数,就是无参函数;如果设置了参数,就是有参函数。
无参函数
自定义函数在使用时需要先定义,再调用。定义函数使用关键字def,调用格式为:函数名()
示例中,定义和调用函数时,括号内没有传入参数,这就是无参函数。
![](https://img.haomeiwen.com/i14777386/cc22266a94d3e60c.png)
形参和实参
有参函数定义时,需要在括号设置参数,调用时也需要设置参数。定义函数时的参数叫形参,用于接收实参传递的数据。调用函数时的参数叫实参,用于给形参传递数据。
示例中,实参"7.8折"会传递给形参discount。
![](https://img.haomeiwen.com/i14777386/4aabedaf462ff9cf.png)
默认值形参
形参的特殊之处,就是可以设置默认值。示例中,radius是非默认的形参,pi是默认值形参,并且默认值为3.14。再次提醒,在定义函数时,必须先写非默认的形参,后写默认值形参。
![](https://img.haomeiwen.com/i14777386/d68c41c7bddb702e.png)
在定义函数时,给形参pi设置了默认值3.14。所以在调用函数中给默认值形参提供了实参值时,Python将优先使用实参值;否则,将使用形参的默认值。
![](https://img.haomeiwen.com/i14777386/19a0eae1b26826d5.png)
在形参中,有默认值参数这种特殊的用法。而在实参中,也有一些特殊的用法,再来回顾一下。
关键字实参与位置实参。对于实参,经常会用到位置实参,同时也要了解关键字实参。示例中的第5行使用了关键字实参,即在括号内直接给形参赋值的方式传递数据。示例中的第6行使用了位置实参,即在括号内传入具体的实参数据,按照位置顺序依次传递给形参。
![](https://img.haomeiwen.com/i14777386/eae4e6aa1663fd2b.png)
缺少实参
还有一个易错点需要记住。使用位置实参时,形参会按照位置顺序依次接收实参处的数据。所以,在调用函数时,缺少位置参数会导致程序报错。
defpetMsg(name,pet):
print(f"{name}有一只{pet}")
petMsg(name="小明", pet="狗")
关键字参数是在调用函数时,使用 形参=实参 的方式传递数据,并且形参名需要和定义时一致。
# 定义一个函数sayWelcome,依次传入形参name和language
def sayWelcome(name, language):
if language == "ZH":
print(f"欢迎你,{name}")
elif language == "EN":
print(f"{name},welcome")
# TODO 通过关键字实参的方式调用函数sayWelcome,传递参数"Gary"和"ZH";
sayWelcome(name = "Gary",language = "ZH")
# TODO 通过位置实参的方式调用函数sayWelcome,传递参数"Jack"与"EN"
sayWelcome("Jack","EN")
print和return的区别
简单来说,函数中使用print,是为了显示信息,将结果直接输出。使用return,是为了返回结果。返回值可以用变量接走,继续使用该返回值做其它事。
print
当调用该函数时,程序执行函数的代码块,直接输出了结果。而这类函数有一个比较大的问题,就是没办法把结果拿去干其他事情。
如图,调用函数能输出结果,但是调用函数的结果却不能用来比较大小。这是因为数据在函数内被直接输出,没有传到函数外。如果要将函数的运行结果,传递到函数外使用。那么就需要用return关键字来将结果返回出来。
![](https://img.haomeiwen.com/i14777386/1ba553170e39e5ca.png)
return
如图,定义函数的代码块中使用了return。当我们调用该函数时,程序执行函数的代码块,会将结果返回给调用函数处。此时调用函数的代码等同于一个变量,可以用它来给其他变量赋值、与其他数据比大小等操作。(这里我还有些不懂,多写写和运行代码)
![](https://img.haomeiwen.com/i14777386/2cdc556f37bf7b88.png)
这里注意,对于使用return的函数,如果我们只是调用该函数,不会有输出结果。如图可以像使用print()输出变量一样,将调用函数的结果输出。
![](https://img.haomeiwen.com/i14777386/9d336e46cdd6ab7e.png)
匿名函数
对于匿名函数和递归的相关知识,能够理解并简单运用即可。匿名函数无需定义函数名,以 关键字 lambda 开头。包含return的简单函数,一般就可以使用匿名函数来进行改写。
递归实现阶乘
当然,递归能实现一些经典问题,比如阶乘问题,斐波那契数列等等。一个正整数的阶乘是所有小于及等于该数的正整数的积,写作n!。例如5!=5×4×3×2×1。因为0的阶乘为1,所以,示例中设置终止条件为n等于0或1时,返回1。又因为阶乘是累乘,所以,递归的前进条件设置为:n * factorial(n-1)。
![](https://img.haomeiwen.com/i14777386/7fe65cb718fbb30b.png)
网友评论