🌈个人主页:羽晨同学
💫个人格言:“成为自己未来的主人~”
我们这篇文章来说一下函数的返回值和匿名函数
函数的返回值
我们先来看下面的这一段函数的定义代码
# 1、返回值的意义
def func1():print('111111111------start')num1=66print('111111111------end')
由于我们学过一些python的基本知识(前面的文章中),所以,我们可以很清楚的明白这段代码所打印出来的结果。
而当我们这个时候想要打印这个函数内部的变量的时候,直接打印是不可以的。
print(num1) # 访问不了的,会报错
这个会进行报错,原因是因为定义在函数内部的变量,只能在当前函数的内部调用。当出了这个变量的作用域的时候,这个变量会进行销毁。
那么我们应该怎么操作来调用到这个变量呢?这个时候就需要用到返回值了
我们来看下面的这一段代码
# a.
def func1():print('111111111------start')num1=66print('111111111------end')return num1
# 调用函数
f1=func1() # 调用了func1的函数,同时将func1函数额返回值赋值给f1
print('返回值:',f1)
print(func1()+10) # 调用了func1函数,并把返回值和10相加
func1() # 不需要在函数外面使用函数的返回值
在这段代码当中,我们就用到了返回值,并使用返回值使得func1中的变量得到打印。
那如果我们未设置返回值,那么会打印出来什么呢?
我们来看这一段代码:
# 未设置返回值
# 注意,如果一个函数未通过return来设置返回值,默认的返回值为None
def func2():print('22222')
r2 = func2()
print(r2) # None: 空值
在这段代码中,我们调用了func2函数,并用r2来想要接收它的返回值。
但是当我们打印r2的时候,却发现,结果是None
所以这段代码,其实等价于下面的这段代码。
# 等价于
def func2():return None
这两段代码,都是将返回值设置为了空。
需要注意的是:
return只能使用在函数中,表示结束函数。
在函数中,和return平级【对齐】的情况下,return后面不写任何语句,否则均为无效。
我们看这段代码:
def func3():print('start-------')returnprint('end--------') # 这句代码不能执行,永远没有执行的可能性
func3() # start-------
我们可以看到的是,这个return后面的代码是不会执行的。
但是,下面的这段代码,却有执行的可能性,因为条件判断语句的存在,可真可假。
def func32(n):print('start-------')if n %2==0:returnprint('end---------') # 有执行的可能性
func32(7)
return xxx 表示结束函数
我们来看下面的这一段代码
return xxx表示结束函数,同时将xxx数据返回到调用函数处
def func33(a,b):total=a+breturn total
r33=func33(4,5)
print(r33)
在同一个函数中,根据条件的区分,可以设置多个return xxx
def compare(num1,num2):if num1>num2:return 1elif num1<num2:return 2else:return 3
com=compare(4,5)
print(com)def compare(num1,num2):if num1>num2:return 1elif num1<num2:return 2return 3
com=compare(4,5)
print(com)
这两段代码是完全等效的。
看到这里,其实return的用法我们已经说了很大的一部分了,那么接下来,我们说一下如果一下子返回多个数的情况。
我们来看下面的这一段代码:
def func34():return 1,2,3,4,5
r34=func34()
print(r34) # (1, 2, 3, 4, 5) 打包,结果是一个元组
这个代码在执行之后,打印出来的是一个元组,这是因为将返回值进行了打包
接下来,我们谈一下break和return的区别
# d. break 和 return的区别
def func41():print('start----111111')for n in range(3):for m in range(5):print(n,m)if m==1:break # break只能使用在循环中,结束当前循环print('end-----1111111')
func41()
print('*' * 50)
def func41():print('start----111111')for n in range(3):for m in range(5):print(n,m)if m==1:return # return 只能使用在函数中,表示结束函数,无论多少循环print('end-----1111111')
func41()
break只能使用在循环当中,结束当前循环,而return只能使用在函数中,表示结束函数。
函数封装的注意事项:
- 观察需求,是否有未知项参与运算,如果有,那么将未知项设置为参数
- 观察需求,函数执行完毕后,是否有结果,如果有结果,则将结果设置为返回值
匿名函数
语法 lambda 形参:返回值
我们来看几个例子:
def add(n):return n+10
# 调用函数并获取返回值
f=add(5)
print(f)
这是我们定义的一个普通的add函数
# 定义函数/创建函数
f1 = lambda n:n+10
print(f1) # <function <lambda> at 0x000001E3F3528860>
# 调用函数并获取返回值
print(f1(2))
r2=f1(5)
这是我们定义出来的一个完全等效的匿名函数。
我们再来举一个例子:
def check1(a,b):return a**2+b**2
r1=check1(4,5)
print(r1)f2=lambda a,b:a**2+b**2
r2=f2(4,5)
print(r2)
上面的那个是原本的函数,下面的那个是等效出来的匿名函数。
匿名函数的使用:
常常将匿名函数作为另一个函数的参数使用
列表,sort(key,reverse)
如果列表中的元素支持大小比较,那么默认会直接排序。
numlist=[23,6,7,5,2,7,9,5,8,6]
numlist.sort(reverse=True)
print(numlist)
如果列表中的元素无法直接比较大小的时候,或者需要自定义排序的规则时,则给key赋值一个函数即可
将列表中的元素依次传递给func函数,该函数的返回值就是指定的排序的规则,一定要注意的是,这个返回值必须可以比较大小。
def rule(x):print(x)return x
但是,我们也可以使用匿名函数
students.sort(key=lambda stu_dict:stu_dict['score'],reverse=True)
这个我们一般经常使用。
好了,这次的内容就到这里,我们下次再见。