大大雷Python零基础课程第七节:函数

https://m.toutiao.com/is/eHxD4oe/

函数是组织好可以重复使用的一个代码块,能够在编程中有效地提高代码复用率。函数可以有参数,也可以没有参数, 函数的参数可以是任意数据类型,甚至可以将一个函数作为参数传给另一个函数。

函数的定义

函数使用def 关键字来定义,后面紧跟函数名和参数,参数需要写在括号内,换行后开始写函数体,就是这个函数需要处理的事情。

下面我们来写一个简单的函数:

def sum(a, b): # 定义一个加法的函数 return a+b c = sum(1, 3)print(c)

上面的代码我们定义了一个比较简单的加法的函数,但是你可能会觉得我直接用a+b也可以计算,为什么非要用函数呢? 用下面的例子我们再看一下:

def sum(a, b): # 定义一个加法的函数    return a+b  c = sum('1', '3')print(c)

上面代码运行的结果是13,这我们想要的吗?这个当然不是我们加法这个函数想要的结果,那么我们可以再修改一下这个函数:

def sum(a, b): # 定义一个整数加法的函数 try: a,b = int(a), int(b) except: raise Exception('参数必须为整数') return a+b c = sum('1', '3')print(c)

上面的代码我们将参数a和b强制转换成整数,如果转换失败,说明输入的参数不是数字或者只包含数字的字符串。 对于非法的参数,我们就可以做一个异常处理,将报错信息抛出来。

上面的函数就包含了类型转换,和整数相加, 后面我们需要进行整数加法运算的时候直接调用函数就可以了,不需要再写一遍重复的代码。

函数传参

  1. 没有参数的函数

import datetimedef now(): # 获取当前时间    return datetime.datetime.now()print(now())

上面的函数就是一个无参函数,获取时间的时候直接调用now()。

  1. 必需参数
    在定义函数的时候,我们可以提前定义好参数,后面调用函数的时候,参数需要按位置顺序填写。

def get_area(width,height): # 计算面积 return width*heightarea = get_area(3, 5)

上面的函数定义了一个计算面积的函数, 参数依次为宽度和高度。调用的时候需要按位置顺序分别填入宽度和高度的值。 那有没有不需要按顺序传入参数的办法呢?当然有,这个就是指定参数名进行传参:

def get_area(width,height): # 计算面积    return width*heightarea = get_area(height=5, width=3)

上面的代码演示了指定参数名进行关键字传参。那再问一个问题,我们能不能将位置传参和指定参数名传参混合使用呢? 我们来试试:

def get_area(width,height): # 计算面积 return width*heightarea = get_area(3, height=5)print(area)

上面代码能正常运行,说明是可以混合使用的,那我们再把传参的顺序换一下试试:

def get_area(width,height): # 计算面积    return width*heightarea = get_area(height=5, 3)print(area)

报错了! 是的,我们把参数位置换了之后,运行出错了。 问题就在于,指定参数名的关键字传参一定要放在位置传参的后面

不定长传参

在有些函数中,参数的数量是不固定的,这个时候我们就需要使用不定长传参

def sum(*args): result = 0 for item in args: result += item return resultprint(sum(1,2,3,4,5,6))

上面的函数我们定义了一个不定长参数,函数会将你传入的所有参数进行相加。

除了不定长的位置传参,也可以使用不定长的关键字传参:

def sum(*args, **kwargs):    result = 0    for item in args:        result += item    if kwargs.get('minus'): # 如果参数有负号,将结果变成负数        result = result * -1    return resultprint(sum(1,2,3,4,5,6))print(sum(1,2,3,4,5,6, minus=True))

上面的函数,除了不定长的位置参数,还定义了不定长的关键字参数。 在调用的时候 minus=True可以传进函数也可以不传。 但是会影响最终的结果。

匿名函数

上面我们讲解的函数都是要使用def关键字指定函数名,在python中还有一种匿名函数--lambda ,不需要写函数名,经常用在一些简单逻辑的处理中。

sum = lambda x, y: x+yprint(sum(10, 20))

上面的两个整数相加,代码就精简了很多。 这里sum是一个变量,这个变量指向的是一个函数。

下面我们再使用一个完全不需要名字的例子

print(list(map(lambda x: x*2, [10,20])))

上面我们就使用一行代码完成了将列表中的每个值乘以2的操作。这里就能体现出来当一些简单逻辑通过一个表达式就能完成的时候,使用lambda匿名函数可以非常精简的处理。

练习作业

  1. 编写一个乘法表的函数,参数中需要指定最大值,比如最大值是9,那么需要打印出,1*1 到 9*9之间的乘法表。

  2. 使用匿名函数获取一个数的平方。
    示例 : 参数为3, 输出结果为:9

  3. 使用不定长参数, 获取所有参数的乘积。

(0)

相关推荐