前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python函数进阶

Python函数进阶

原创
作者头像
Heaven645
发布2024-07-24 00:41:49
1041
发布2024-07-24 00:41:49
举报
文章被收录于专栏:Python学习

前言

在Python中,函数是组织代码、提高重用性与可读性的基本构建块。随着程序逻辑的复杂性增加,函数的使用也逐渐演变出更多的形式和技巧。本章详细讲解了Python函数的进阶使用,包括函数的多返回值、函数的多种传参方式以及匿名函数。


本篇文章参考:黑马程序员

一、函数多返回值

思考:如果一个函数有两个return (如下所示),程序会如何执行?

代码语言:python
代码运行次数:0
复制
def test_return():
    return 1
    return 2
result=test_return()
print(result)

输出结果:

1

可以看出,该段代码只执行了第一个return。因为return可以退出当前函数,导致return下方的代码不执行,所以代码执行到第一个return后,就会退出函数,导致第二个return不被执行。

那如果一个函数要有多个返回值,该如何书写代码?

基本语法:

def 函数名():

  return 返回值1,返回值2

变量1,变量2= 函数名()

print(变量1)

print(变量2)

按照返回值的顺序,写对应顺序的多个变量接收即可,变量之间用逗号隔开,支持不同类型的数据return。

代码语言:python
代码运行次数:0
复制
def test_return():
    return 1,"Hello",True

x,y,z=test_return()
print(x)
print(y)
print(z)

输出结果:

1

Hello

True

二、函数的多种传参方式

函数有四种常见的参数使用方式:

  1. 位置参数
  2. 关键字参数
  3. 缺省参数
  4. 不定长参数

①位置参数:

调用函数时根据函数定义的参数位置来传递参数。

注意:传递的参数和定义的参数的顺序及个数必须一致

代码语言:python
代码运行次数:0
复制
def user_info(name,age,gender):
    print(f"姓名:{name},年龄:{age},姓名是:{gender}")
# 位置参数
# 需按照参数定义的顺序传参
user_info("小明",20,"男")
#错误示范:不按照固定的顺序会导致内容错乱
user_info("男","小明",20)

姓名:小明,年龄:20,姓名是:男

姓名:男,年龄:小明,姓名是:20

②关键字参数:

函数调用时通过“键=值”形式传递参数。

作用:可让函数更加清晰、容易使用,同时也清除了参数的顺序需求。

代码语言:python
代码运行次数:0
复制
def user_info(name,age,gender):
    print(f"姓名:{name},年龄:{age},姓名是:{gender}")
# 关键字参数
# 可不按照参数定义的顺序传参
user_info(name="小王",age=11,gender="女")
user_info(age=12,gender="女",name="小晓")

输出结果:

姓名:小王,年龄:11,姓名是:女

姓名:小晓,年龄:12,姓名是:女

③位置参数和关键字参数混用:

位置参数和关键字参数混用时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序。

代码语言:python
代码运行次数:0
复制
def user_info(name,age,gender):
    print(f"姓名:{name},年龄:{age},姓名是:{gender}")
# 位置参数和关键字参数混用
user_info("小菲",age=15,gender="女")
# 错误示范:会报错 SyntaxError: positional argument follows keyword argument
# user_info(name="小菲",15,"女")

输出结果:

姓名:小菲,年龄:15,姓名是:女

④缺省参数:

缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传递该默认参数的值。

作用:当调用函数时没有传递参数, 就会使用缺省参数对应的值。

注意:所有无默认值的参数必须放在任何带有默认值的参数之前。

代码语言:python
代码运行次数:0
复制
# 缺省参数
# 所有无默认值参数的参数必须放在任何带有默认值的参数之前
def user_info(name,age=11,gender="男"):
    print(f"姓名:{name},年龄:{age},姓名是:{gender}")

user_info("小天",)
user_info("小美",13,"女")

# 错误示范,会报错 yntaxError: parameter without a default follows parameter with a default
# def user_info(name="小美",age,gender):
    #print(f"姓名:{name},年龄:{age},姓名是:{gender}")

输出结果:

姓名:小天,年龄:11,姓名是:男

姓名:小美,年龄:13,姓名是:女

⑤不定长参数:

不定长参数也叫可变参数,用于函数调用时不确定传递多少个参数(不传参也可以)的场景。

不定长参数的类型:

  • 位置传递 传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型。 基本语法: def 参数名(*args):   print(args)
  • 关键字传递: 参数是“键=值”的形式, 所有的“键=值”都会被kwargs接受, 同时会根据“键=值”组成字典。 基本语法: def 参数名(**kwargs):   print(args)
代码语言:python
代码运行次数:0
复制
# 位置不定长,*号
# 不定长定义的形式参数会作为元组存在,接收不定长数量的参数传入
def user_info(*args):
    print(f"args参数的类型为{type(args)},内容为{args}")

user_info(1,2,3,"小明","男孩")

输出结果:

args参数的类型为<class 'tuple'>,内容为(1, 2, 3, '小明', '男孩')

代码语言:python
代码运行次数:0
复制
# 关键字不定长,**号
def user_info(**kwargs):
    print(f"kwargs参数的类型为{type(kwargs)},内容为{kwargs}")
# 错误示范:传进的参数必须是“键=值”的形式,否则会报错 TypeError: user_info() takes 0 positional arguments but 5 were given
# user_info(1,2,3,"小明","男孩")
user_info(name="小明",age=15,gender="男")

输出结果:

kwargs参数的类型为<class 'dict'>,内容为{'name': '小明', 'age': 15, 'gender': '男'}

三、匿名函数

①函数作为参数传递:

在前面的函数学习中,我们一直使用的函数都是接受数据(数字、字符串、字典、列表、元组等)作为参数传入。

其实,函数本身也可作为参数传入另一个函数内。

代码语言:python
代码运行次数:0
复制
# 定义一个函数,接收另一个函数作为传入参数
def test_func(compute):
    result=compute(1,2) #确定compute是函数
    print(f"compute参数的类型为{type(compute)}")
    print(f"计算结果为{result}")

# 定义一个函数,准备作为参数传入另一个函数
def compute(x,y):
    return x+y
# 调用并传入参数
test_func(compute)

输出结果:

compute参数的类型为<class 'function'>

计算结果为3

【分析】

函数compute作为参数传入了test_func函数中使用,这是一种计算逻辑的传递而非数据的传递。

②lambda匿名函数:

函数的定义:

  • def关键字可定义带有名称的函数,有名称的函数,可以基于名称重复使用。
  • lambda关键字可定义匿名函数(无名称),无名称的匿名函数,只可临时使用一次。

匿名函数基本语法:

lambda 传入参数 : 函数体(一行代码)

  • lambda 是关键字,表示定义匿名函数
  • 传入参数表示匿名函数的形式参数,如x, y 表示接收两个形式参数
  • 函数体即函数的执行逻辑(注意:函数体内只能写一行代码,无法写多行代码
代码语言:python
代码运行次数:0
复制
# 定义一个函数,接收另一个函数作为传入参数
def test_func(compute):
    result=compute(1,2)
    print(f"计算结果为{result}")

# 通过lambda匿名函数的形式,将匿名函数作为参数传入
test_func(lambda x,y:x+y)

输出结果:

计算结果为3

lambda匿名函数更为简易,能提高代码的灵活性和可读性,适用于只需要使用一次的简单操作。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、函数多返回值
  • 二、函数的多种传参方式
  • 三、匿名函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档