7.1 进阶函数

在此篇中进一步学习函数的用法

多个返回值的写法

1
2
3
4
5
def test():
    return 1,2
a,b= test()
print(a)
print(b)

按照返回值的顺序,写对应的多个变量接收即可

变量之间用逗号隔开

支持不同类型的数据return

函数的多种参数使用形式

位置参数

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

1
2
3
def user_info(name,age,gender):
    print(f'您的姓名是{name},年龄是{age},性别是{gender}')	# 注意此处print内有f,意为在字符串内插入表达式
user_info('Retr0',18,'男')

关键字参数

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

1
2
3
4
5
6
7
8
def user_info(name,age,gender):
     print(f'您的姓名是{name},年龄是{age},性别是{gender}')
# 关键字传参
user_info(name='小明',age=20,gender='男')
# 可以不按照固定顺序
user_info(age=20,gender='男',name='小明')
# 可以和位置参数混用,位置参数必须在前,且匹配参数顺序
user_info('小明',age=20,gender='男')

注意:函数调用时,如果有位置参数时位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序

缺省参数

也叫默认参数,用于定义函数,为参数提供默认值,调用函数时刻不传该默认参数的值

注意:所有位置参数必须出现在默认参数前,包括函数定义和调用

1
2
3
4
def user_info(name,age,gender='男'):
    print(f'您的姓名是{name},年龄是{age},性别是{gender}')
user_info('Retr0',20)
user_info('小红',20,'女')

函数调用时,如果为缺省参数传值则修改默认参数值,否则使用这个默认值

不定长参数

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

类型包括:

位置传递

1
2
3
4
def test(*args):	# *标记表示args这个形式参数接收的参数数量无限,且采用位置传递
    print(args)
test('Retr0')
test('Retr0','18')

传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组,args是元组类型

关键字参数

1
2
3
def test(**kwargs):	# **标记表示kwargs这个形式参数接收的参数数量无限,且采用关键字传递
    print(kwargs)
test(name='Retr0',age=18,gender='男')

参数是“键=值”的形式的情况下,所有的“键=值”都会被kwargs接受,同时根据“键=值”组成字典

函数作为参数传递

示例:

1
2
3
4
5
6
def test(compute):
    result = compute(1,2)
    print(result)
def compute(x,y):
    return x + y
test(compute)

此处函数compute作为参数传入了test函数中使用

实质上数据由test函数内部传入的compute函数进行计算

所以这是一种**计算逻辑的传递,而非数据的传递,而任何逻辑都可以自行定义并作为函数传入**

lambda匿名函数

众所周知,

def 关键字,可以定义带有名称的函数

而 lambda关键字,可以定义匿名函数(无名称)

有名称的函数,可以基于名称重复使用

无名称的匿名函数,只能临时使用一次

匿名函数定义语法

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

  • lambda 是关键字,表示定义匿名函数
  • 传入参数表示匿名函数的形式参数,如:x,y表示接收2个形式参数
  • 函数体,就是函数的执行逻辑,要注意:只能写一行,无法写多行代码

例如:

1
2
3
4
def test(compute):
    result = compute(1,2)
    print(result)
test(lambda x,y:x+y)
Licensed under CC BY-NC-SA 4.0
已存在于互联网
发表了126篇文章 · 总计210.25k字
萌ICP备20267077号
Powered by ctOS