当前位置: 首页 > article >正文

Python语法基础(三)

🌈个人主页:羽晨同学 

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

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

函数的返回值

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

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

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

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

print(num1) # 访问不了的,会报错

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

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

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

# 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中的变量得到打印。

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

我们来看这一段代码:

# 未设置返回值
# 注意,如果一个函数未通过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-------')
    return
    print('end--------') # 这句代码不能执行,永远没有执行的可能性
func3() # start-------

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

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

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

return xxx 表示结束函数 

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

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

def func33(a,b):
    total=a+b
    return total
r33=func33(4,5)
print(r33)

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

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的用法我们已经说了很大的一部分了,那么接下来,我们说一下如果一下子返回多个数的情况。

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

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)

这个我们一般经常使用。

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


http://www.kler.cn/a/413497.html

相关文章:

  • javaweb-day02-JS(javascript)
  • leetcode 二叉树的最大深度
  • 第四十篇 DDP模型并行
  • 从零开始:NetBox 4.1 Docker 部署和升级
  • day2全局注册
  • windows电脑上安装树莓派操作系统
  • Flink--API 之Transformation-转换算子的使用解析
  • redis-cluster集群搭建
  • 网络服务与应用
  • PySide6 QSS(Qt Style Sheets) Reference: PySide6 QSS参考指南
  • BERT 详解
  • 如何在CodeIgniter中加载视图
  • 利用Python爬虫获取淘宝商品评论:实战案例分析
  • 在kali用msfpc远程控制Windows
  • 作业3-基于pytorch的非线性模型设计
  • 理解B+树
  • 芯科科技率先支持Matter 1.4,推动智能家居迈向新高度
  • Android 常用命令和工具解析之Trace相关
  • SpringBoot技术在欢迪迈手机商城中的应用
  • 【CLIP】2: semantic-text2image-search前后端调试
  • 实时数仓Kappa架构:从入门到实战
  • [so]实现Linux 程序使用指定的 .so 库,而不是系统的库
  • 网路协议解说
  • 主键、外键和索引之间的区别?
  • 如何处理python爬虫ip被封
  • SQL for XML