python学习笔记 | 6.3、函数-函数的参数

一、5 种参数一句话看懂

  1. 位置参数

    必须传,按顺序对应

    复制代码
    def power(x, n):
  2. 默认参数

    可传可不传,不传用默认值

    复制代码
    def power(x, n=2):

    ⚠️ 必须用不可变对象(str、None、数字),不能用 list!

  3. 可变参数 *args

    传任意多个数,自动变成 tuple

    复制代码
    def calc(*numbers):
  4. ** 关键字参数 kw

    传任意键值对,自动变成 dict

    复制代码
    def person(name, age, **kw):
  5. 命名关键字参数

    限制只能传指定名字的参数

    复制代码
    def person(name, age, *, city, job):

二、最简单记忆口诀

  • *args → 多值打包成 tuple
  • **kw → 键值对打包成 dict
  • 默认参数用 不可变对象
  • 顺序:必选 → 默认 → 可变 → 命名关键字 → 关键字

三、课后练习题(必做)

题目:把只能算两个数乘积的函数,改成接收 1 个或多个数相乘。

原函数:

复制代码
def mul(x, y):
    return x * y

正确答案(用可变参数 *args)

复制代码
def mul(*args):
    result = 1
    for n in args:
        result *= n
    return result

逐行解释

  1. *args 接收任意多个数字
  2. 先把 result 设为 1
  3. 循环把每个数字乘进去
  4. 返回最终乘积

运行测试,会输出:

复制代码
测试成功!

=分割线练习题

练习题 1(位置参数 + 默认参数)

定义一个函数 greet

  • 接收两个参数:
    • name:必传(位置参数)
    • word:问候语,默认值为 '你好'
  • 函数打印:word, name!

测试:

复制代码
greet("小明")
greet("小红", "早上好")

代码

复制代码
def greeet(name):
    print("hello",name)
greeet('小明')

练习题 2(可变参数 *args)

定义一个函数 sum_num,可以接收任意多个数字 ,返回它们的总和

测试:

复制代码
print(sum_num(1, 2, 3))        # 6
print(sum_num(10, 20))         # 30
print(sum_num(5))              # 5

代码

复制代码
# ==========❌️
# num=0
# def sum_num(*args):
#     for i in range(sum_num()):
#         num=num+i
#     print(num)
# sum_num(1,2,3)
# 这里有 3 个关键错误,我一个个说:
# 1. range(sum_num()) 完全不对----args才是你传进来的数字:(1,2,3)---应该循环 args,不是 sum_num()
# num 要定义在函数里面----你现在写在函数外面,会出问题。变量写在函数外面,是所有人共用的; 写在函数里面,是这个函数自己私用的。
# ======✅️
def sum_num(*args):
    sum=0
    for i in args:
        sum=sum+i
    print(sum)
sum_num(1,2,3)
#函数外面的变量:每次调用不会清零,会一直累加 → 错;;函数里面的变量:每次调用都会重新开始 → 对

练习题 3(关键字参数 **kw)

定义一个函数 student

  • 必选参数:name, age

  • 关键字参数:**info

  • 函数内部打印:

    复制代码
    姓名:xxx
    年龄:xxx
    其他信息:xxx

测试:

复制代码
student("张三", 18)
student("李四", 20, city="上海", gender="男")

代码

复制代码
def student(name,age,**info):#**info关键字参数,里面存的是字典,即key和value键值组合
    print('姓名:', name)
    print('年龄:', age)
    for key,value in info.items():  #info.items():它会把字典变成类似下面这种一对一对的形式:
        print(key,':',value)#关键字参数显示的时候,键值之间加冒号
    print('-'*20)  #隔开每次循环打印结果
student('张三',18)
student('李四',20,city='上海',gender='男')

练习题4

定义一个函数 avg(),可以接收任意多个数字 ,返回这些数字的平均值

要求:

  1. 使用 *args
  2. 先求和,再除以数字的个数
  3. 最后打印结果

测试:

复制代码
avg(1, 2, 3)          # 平均值 2
avg(10, 20, 30, 40)   # 平均值 25

代码

复制代码
# ============✅️
def avg(*args):
    sum = 0
    count = len(args)
    for i in args:
        sum = sum + i
    print(sum/count)
avg(1,2,3)
avg(10,20,30,40)
# 只需要做一次的事情,放循环外面。每个数都要做的事情,放循环里面。
# 这件事要做几次?1 次 → 放外面   多次 → 放里面

==分割线=什么是关键字参数?

info 就是一个 "字典 dict"

**info 的作用只有一句话:

把你传进去的所有 "关键词 = 值",打包成一个字典。


1. 先看调用

复制代码
student("李四", 20, city="上海", gender="男")

这里:

  • city="上海"
  • gender="男"

这些带名字的参数,会自动打包成一个字典:

复制代码
info = {
    "city": "上海",
    "gender": "男"
}

2. 函数里怎么用?

复制代码
def student(name, age, **info):
    print(name)
    print(age)
    print(info)  # 直接打印这个字典

输出:

复制代码
李四
20
{'city': '上海', 'gender': '男'}

3. 和 *args 对比一下(超级好记)

  • *args → 打包普通数字 / 值 → 变成 tuple 元组
  • **info → 打包key=value → 变成 dict 字典

4. 什么时候用 **info?

当你想传不确定数量的、带名字的信息时用:

  • 地址
  • 性别
  • 电话
  • 班级

一句话终极总结

复制代码
**info

= 接收一堆 a=1, b=2

= 自动变成字典 {'a':1, 'b':2}

相关推荐
BU摆烂会噶2 小时前
【LangGraph】实战:基于 LangGraph 实现的智能文档问答系统
人工智能·python·langchain
2301_813599552 小时前
持久化存储如何适配不同浏览器?解决隐私模式下存储失败的指南
jvm·数据库·python
2501_914245932 小时前
SQL如何高效提取大表前几行:分页查询与OFFSET优化
jvm·数据库·python
Ulyanov2 小时前
《玩转QT Designer Studio:从设计到实战》 QT Designer Studio状态机深度应用:智能待办事项管理系统
开发语言·python·qt·gui·雷达电子对抗系统仿真
AC赳赳老秦2 小时前
OpenClaw界面错乱、闪退问题,一键修复教程(附工具)
人工智能·python·职场和发展·django·tornado·deepseek·openclaw
xiaokangzhe2 小时前
GluserFS笔记
笔记
禁默2 小时前
基于Rokid灵珠平台的全科学习助手智能体开发实践
学习·智能体·rokid·ai眼镜
LiAo_1996_Y2 小时前
如何使用Navicat连接云端MariaDB_白名单与实例配置
jvm·数据库·python
2401_837163892 小时前
mysql如何利用cron定时备份_mysql自动化配置说明
jvm·数据库·python