Python学习笔记(8) --函数的多返回值,不同传参,匿名函数

传送门==>B站黑马python入门教程


目录

  • [1. 函数的多返回值](#1. 函数的多返回值)
  • [2. 函数的不同传参](#2. 函数的不同传参)
  • [3. 函数作为参数传递](#3. 函数作为参数传递)
  • [4. 匿名函数](#4. 匿名函数)

1. 函数的多返回值

若一个函数写了两个return时,程序如何执行?

python 复制代码
def get_info():
    return "张三"
    return 20

info = get_info()
print(info)

我们发现函数执行到第一个return时,程序就退出了;

如果一个函数要多个返回值,如何写代码

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

变量之间可以用多个逗号分隔;

支持不同类型的数据return;

python 复制代码
# 示例;
def demo_return():
    return 1,2,"张三"

# 调用函数
a,b,c = demo_return()
print(a)
print(b)
print(c)

2. 函数的不同传参


在使用方式上的不同,函数有4中常见的参数使用方式;

  • 位置参数;
  • 关键字参数;
  • 缺省参数;
  • 不定长参数;

位置参数 :调用函数时根据函数定义的参数位置来传递参数;
注:函数定义的参数顺序必须与调用函数时传递的参数顺序一致

python 复制代码
def user_info(name,age,gender):
    """
    打印用户信息
    :param name: 用户名
    :param age: 用户年龄
    :return:
    """
    print("用户名:",name)
    print("用户年龄:",age)
    print("用户性别:",gender)

user_info("张三",18,"男")

关键字参数:函数调用时通过 "键值对"的形式传递参数;

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

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

python 复制代码
def user_info(name,age,gender):
    """
    打印用户信息
    :param name: 用户名
    :param age: 用户年龄
    :return:
    """
    print("用户名:",name)
    print("用户年龄:",age)
    print("用户性别:",gender)

# 关键字传参:
user_info(name="张三",age=18,gender="男")
# 当然,可以不按照固定顺序;
user_info(gender="男",name="张三",age=18)
# 也可以和位置参数混合使用,位置参数在前面,且匹配参数顺序使用;
user_info("张三",gender="男",age=18)

缺省参数 : 即默认参数,用于定义函数时,为参数提供默认值,调用函数时可以不传默认参数的值;
注:所有位置参数都必须出现在默认参数前,包括函数定义和调用;

python 复制代码
def user_info(name,age,gender="男"):
    """
    :param name:
    :param age:
    :param gender: 默认为 男
    :return:
    """
    print("用户名:",name)
    print("用户年龄:",age)
    print("用户性别:",gender)

#
user_info("张三",18)
user_info("张三",18,"女")
# 年龄没有默认值,调用就会报错;
user_info("张三")


不定长参数 : 即可变参数,用于定义函数时,为参数提供默认值,调用函数时可以不传默认参数的值;

作用:当调用函数时不确定参数个数时,可以使用不定长的参数;

不定长参数的类型:

  • 位置传递,
  • 关键字传递

位置传递

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

python 复制代码
def user_info(* args):
    print("用户信息:",args)

# 调用;
user_info("张三")
user_info("张三","男")
user_info("张三","男",18)
user_info("张三","男",18,"上海")
user_info("张三","男",18,"上海","中国")
user_info("张三","男",18,"上海","中国","中国")

关键字传递

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

python 复制代码
def user_info(** kwargs):
    print("用户信息:",kwargs)

#
user_info(name="张三")
user_info(name="张三",age=18)
user_info(name="张三",age=18,gender="男")
user_info(name="张三",age=18,gender="男",city="上海")
user_info(name="张三",age=18,gender="男",city="上海",country="中国")

3. 函数作为参数传递


在前面的函数学习中,我们一直使用的函数,都是接受数据作为参数传入:

  • 数字
  • 字符串
  • 字典,列表,元组等

实际上,学习的函数本身也可以作为参数传入另一个函数内

示例如下代码:

python 复制代码
def test_func(compute):
    res = compute(1,2)
    print(f"参数compute类型为:{type(compute)}")
    print(res)

def compute(x,y):
    return x+y

test_func(compute)

函数compute作为参数,传入test_func函数中使用

  • test_func需要一个函数作为参数传入,这个函数需要接收2个数字进行计算,计算逻辑由这个被传入的函数决定
  • compute函数接收2个数字对其进行计算,compute函数作为参数,传递到test_func函数使用;
  • 最终,在test_func函数的内部,由传入的compute函数,完成对数字的计算操作;

4. 匿名函数


lambda匿名函数

在函数定义中

  • def关键字,可以定义带有名称的函数
  • lambda关键字,可以定义匿名函数(没有名称)

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

无名称的匿名函数,只可以临时使用一次;

匿名函数的定义语法:
lambda 传入参数:函数体(一行代码)

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

如下代码示例:

可以通过def关键字,定义一个函数,传入;

python 复制代码
def test_func(compute):
    res = compute(1,2)
    print(f"参数compute类型为:{type(compute)}")
    print(res)

def compute(x,y):
    return x+y

test_func(compute)

可以通过lambda关键字,定义一个匿名函数

python 复制代码
def test_func(compute):
    res = compute(1,2)
    print(f"参数compute类型为:{type(compute)}")
    print(res)

test_func(lambda x,y:x+y)

使用def和lambda定义的函数,功能一样,只是lambda定义的函数,没有名称,只能使用一次;


相关推荐
qq_19277987几秒前
高级爬虫技巧:处理JavaScript渲染(Selenium)
jvm·数据库·python
超级大只老咪18 分钟前
快速进制转换
笔记·算法
u01092727119 分钟前
使用Plotly创建交互式图表
jvm·数据库·python
爱学习的阿磊20 分钟前
Python GUI开发:Tkinter入门教程
jvm·数据库·python
Imm7771 小时前
中国知名的车膜品牌推荐几家
人工智能·python
tudficdew1 小时前
实战:用Python分析某电商销售数据
jvm·数据库·python
sjjhd6521 小时前
Python日志记录(Logging)最佳实践
jvm·数据库·python
2301_821369612 小时前
用Python生成艺术:分形与算法绘图
jvm·数据库·python
机 _ 长2 小时前
YOLO26 改进 | 基于特征蒸馏 | 知识蒸馏 (Response & Feature-based Distillation)
python·深度学习·机器学习