Python语法基础(三)

🌈个人主页:羽晨同学

💫个人格言:"成为自己未来的主人~"

我们这篇文章来说一下函数的返回值匿名函数

函数的返回值

我们先来看下面的这一段函数的定义代码

python 复制代码
# 1、返回值的意义
def func1():
    print('111111111------start')
    num1=66
    print('111111111------end')

由于我们学过一些python的基本知识(前面的文章中),所以,我们可以很清楚的明白这段代码所打印出来的结果。

而当我们这个时候想要打印这个函数内部的变量的时候,直接打印是不可以的。

python 复制代码
print(num1) # 访问不了的,会报错

这个会进行报错,原因是因为定义在函数内部的变量,只能在当前函数的内部调用。当出了这个变量的作用域的时候,这个变量会进行销毁。

那么我们应该怎么操作来调用到这个变量呢?这个时候就需要用到返回值了

我们来看下面的这一段代码

python 复制代码
# a.
def func1():
    print('111111111------start')
    num1=66
    print('111111111------end')
    return num1
# 调用函数
f1=func1() # 调用了func1的函数,同时将func1函数额返回值赋值给f1
print('返回值:',f1)
print(func1()+10) # 调用了func1函数,并把返回值和10相加
func1() # 不需要在函数外面使用函数的返回值

在这段代码当中,我们就用到了返回值,并使用返回值使得func1中的变量得到打印。

那如果我们未设置返回值,那么会打印出来什么呢?

我们来看这一段代码:

python 复制代码
# 未设置返回值
# 注意,如果一个函数未通过return来设置返回值,默认的返回值为None
def func2():
    print('22222')
r2 = func2()
print(r2) # None: 空值

在这段代码中,我们调用了func2函数,并用r2来想要接收它的返回值。

但是当我们打印r2的时候,却发现,结果是None

所以这段代码,其实等价于下面的这段代码。

python 复制代码
# 等价于
def func2():
    return None

这两段代码,都是将返回值设置为了空。

需要注意的是:

return只能使用在函数中,表示结束函数。

在函数中,和return平级【对齐】的情况下,return后面不写任何语句,否则均为无效。

我们看这段代码:

python 复制代码
def func3():
    print('start-------')
    return
    print('end--------') # 这句代码不能执行,永远没有执行的可能性
func3() # start-------

我们可以看到的是,这个return后面的代码是不会执行的。

但是,下面的这段代码,却有执行的可能性,因为条件判断语句的存在,可真可假。

python 复制代码
def func32(n):
    print('start-------')
    if n %2==0:
        return
    print('end---------') # 有执行的可能性
func32(7)

return xxx 表示结束函数

我们来看下面的这一段代码

return xxx表示结束函数,同时将xxx数据返回到调用函数处

cpp 复制代码
def func33(a,b):
    total=a+b
    return total
r33=func33(4,5)
print(r33)

在同一个函数中,根据条件的区分,可以设置多个return xxx

python 复制代码
def compare(num1,num2):
    if num1>num2:
        return 1
    elif num1<num2:
        return 2
    else:
        return 3
com=compare(4,5)
print(com)

def compare(num1,num2):
    if num1>num2:
        return 1
    elif num1<num2:
        return 2
    return 3
com=compare(4,5)
print(com)

这两段代码是完全等效的。

看到这里,其实return的用法我们已经说了很大的一部分了,那么接下来,我们说一下如果一下子返回多个数的情况。

我们来看下面的这一段代码:

python 复制代码
def func34():
    return 1,2,3,4,5
r34=func34()
print(r34) # (1, 2, 3, 4, 5) 打包,结果是一个元组

这个代码在执行之后,打印出来的是一个元组,这是因为将返回值进行了打包

接下来,我们谈一下break和return的区别

python 复制代码
# 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 形参:返回值

我们来看几个例子:

python 复制代码
def add(n):
    return n+10
# 调用函数并获取返回值
f=add(5)
print(f)

这是我们定义的一个普通的add函数

python 复制代码
# 定义函数/创建函数
f1 = lambda n:n+10
print(f1) # <function <lambda> at 0x000001E3F3528860>
# 调用函数并获取返回值
print(f1(2))
r2=f1(5)

这是我们定义出来的一个完全等效的匿名函数。

我们再来举一个例子:

python 复制代码
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)

如果列表中的元素支持大小比较,那么默认会直接排序。

python 复制代码
numlist=[23,6,7,5,2,7,9,5,8,6]
numlist.sort(reverse=True)
print(numlist)

如果列表中的元素无法直接比较大小的时候,或者需要自定义排序的规则时,则给key赋值一个函数即可

将列表中的元素依次传递给func函数,该函数的返回值就是指定的排序的规则,一定要注意的是,这个返回值必须可以比较大小。

python 复制代码
def rule(x):
    print(x)
    return x

但是,我们也可以使用匿名函数

python 复制代码
students.sort(key=lambda stu_dict:stu_dict['score'],reverse=True)

这个我们一般经常使用。

好了,这次的内容就到这里,我们下次再见。

相关推荐
梦想的旅途227 分钟前
Python实现企业微信文本消息发送
开发语言·python·企业微信
%4744 分钟前
DAY41
pytorch·python
敲代码还房贷1 小时前
VMware17 + Ubuntu22.04 共享 完整步骤
linux·python·ubuntu
大鹏说大话1 小时前
美业微信会员系统哪个好
开发语言
测试19981 小时前
Selenium 无法定位元素的几种解决方案
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
半亩码田2 小时前
C#转Python第3.6篇:Python 的 @property 比 C# 的 get/set 更灵活
java·python·c#
程序员与背包客_CoderZ2 小时前
高性能分布式KV存储引擎RocksDB入门与C/C++编码实战
c语言·开发语言·数据库·c++·分布式·分布式数据库·rocksdb
欧叶冲冲冲2 小时前
Python常见数据结构的CRUD(LeetCode高频版速查)
数据结构·python·leetcode
钱栈up2 小时前
Mac 开发机一键发版不用切环境:我这样改造了团队的后端部署脚本Maven编译卡住20分钟?我靠两步定位到2处隐蔽编译错误
开发语言·python·macos
william_yangshun2 小时前
【大模型部署实战】kimi-k3-in-c 中文版:用 176KB 纯 C99 引擎在 CPU 上跑 Kimi K3 上手指南
c语言·开发语言