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定义的函数,没有名称,只能使用一次;


相关推荐
摇滚侠2 小时前
Redis 零基础到进阶,Redis 哨兵监控,笔记63-73
数据库·redis·笔记
ZHSH.2 小时前
2026蓝桥杯备赛 | 赛事介绍及python基础(未完)
python·蓝桥杯·数据结构与算法
长安牧笛2 小时前
设计残疾人出行路线规划工具,输入起点终点,自动筛选无障碍通道,电梯,盲道路线,避开台阶和陡坡。
python
老王熬夜敲代码2 小时前
网络中数据传输的具体过程
linux·网络·笔记
charlie1145141913 小时前
现代C++嵌入式教程:C++98基础特性:从C到C++的演进(1)
c语言·开发语言·c++·笔记·学习·教程
汤愈韬3 小时前
TK_网络基础和常见攻击(笔记)
网络·笔记
喜欢吃豆3 小时前
我把 LLM 技术栈做成了一张“可复用的认知地图”:notes-on-llms 开源仓库介绍
学习·语言模型·架构·开源·大模型·多模态
程序员佳佳3 小时前
2025年大模型终极横评:GPT-5.2、Banana Pro与DeepSeek V3.2实战硬核比拼(附统一接入方案)
服务器·数据库·人工智能·python·gpt·api
刘某的Cloud4 小时前
列表、元组、字典、集合-组合数据类型
linux·开发语言·python