Python 函数
大家好,这一期让我们来看看Python中比较核心的知识点:函数(也叫方法),那么到底什么是一个函数呢?先让我引入一个官方一点的定义:
函数是对程序逻辑进行结构化或者过程化的一种编程方法。是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。
好啦,我知道这说的不是人话,其实简单理解就是: 如果我们有一些代码可以执行一些功能,比如有100行,我们可以把这些代码打包叫做A,那么A就是一个函数,下次我们想要执行一样的功能,不用重新写100行,直接调用A就可以了。在接下来的介绍中让我们看看实际例子
内置函数,调用函数
首先,Python内置了很多有用的函数,我们可以直接调用。不需要创建。而要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs
abs(-500)
Out:500
很简单吧,只要直接调用函数名和函数需要的参数即可,再看一些其他的内置函数的例子:
type('Hello') # <class 'str'>
max(10,20,30,45) # 45
len('Hello world') # 11
大家看到常用的type函数了吧~,还有很多都是非常好用的内置函数,大家可以自己谷歌百度一下,在实际编程中非常有效,不过要注意一点,如果参数传递错误,那就会出错:
abs(1, 5)
TypeError: abs() takes exactly one argument (2 given)
这里很好理解,abs这个内置方法只接受1个参数,这里传递了两个所以就报错了。
如何定义一个函数
我们可以自己创建函数,创建一个函数很简单,利用关键字def就可以, 之后依次写出函数名、括号、括号中的参数和冒号,最后在缩进块中编写函数体,函数的返回值用return
语句返回。当然,如果不需要返回结果值,也可以不加return
。我们以自定义一个求绝对值的my_abs
函数为例:
def my_abs(x):
if x >= 0:
return x
else:
return -x
这里大家就可以发现,我们之前所学到的逻辑条件排上了用场,这里我们根据绝对值的求法写出了自己的函数,如果是正数返回函数本身,如果是负数,返回它的相反数。让我们测试一下
my_abs(-200)
Out:200
这里需要注意几点:函数体内部的语句在执行时,一旦执行到return
时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。
- 如果没有
return
语句,函数执行完毕后也会返回结果,只是结果为None
。 - return None
可以简写为
return`。
函数的参数
定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。
Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。
默认参数
我们仍以具体的例子来说明如何定义函数的默认参数。我们现在想写一个求平方的函数:
def power(x):
return x * x
测试一下是否正确
power(5)
Out:25
现在,如果我们要计算 x3x3 怎么办?可以再定义一个power3函数,但是如果要计算 x4x4 、 x5x5 ……怎么办?我们不可能定义无限多个函数。你也许想到了,可以把 power(x) 修改为 power(x, n),用来计算 xn:
def power(x, n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
对于这个修改后的 power 函数,可以计算任意 n 次方:
power(2, 3)
Out:8
但是,旧的调用代码失败了,原因是我们增加了一个参数,导致旧的代码无法正常调用:
power(9)
TypeError: power() missing 1 required positional argument: 'n'
这个时候,默认参数就排上用场了。由于我们经常计算 x2x2 ,所以,完全可以把第二个参数 n 的默认值设定为 2:
def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
这样,当我们调用 power(5) 时,相当于调用 power(5, 2):
power(5)
Out:25
而对于 n > 2 的其他情况,就必须明确地传入 n,比如 power(5, 3)。从上面的例子可以看出,默认参数可以简化函数的调用。设置默认参数时,有几点要注意:
- 必选参数在前,默认参数在后,否则Python的解释器会报错(思考一下为什么默认参数不能放在必选参数前面)
- 如何设置默认参数
好啦,今天先为大家讲到这里,有很多复杂的方法还要大家自己去探索,