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}

相关推荐
aaaameliaaa4 分钟前
结构体 结构体
c语言·笔记·算法
梦想不只是梦与想6 分钟前
环境管理系统:Conda(一)
python·conda·环境隔离
李白客36 分钟前
数据库培训怎么选?零基础到DBA的学习路线与机构认证对比(2026)
数据库·学习
计算机源码社36 分钟前
基于K-Means聚类的新生儿败血症临床分型与可视化分析系统 基于数据挖掘的新生儿败血症生命体征时序走势与关联性可视化研究
大数据·hadoop·python·数据挖掘·数据分析·spark·毕业设计
一阵寒风38 分钟前
用 AI 把PCB制前工程CAM无人值守输出系统做出来
python·ai编程·pcb工艺
留白_1 小时前
代运营面试问答
学习
是隼人1 小时前
buuctf-pwn PWN8题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
有Li1 小时前
【AI答疑】MR数据预处理步骤
人工智能·笔记·算法·语言模型·医学生
SamChan901 小时前
Python 处理小语种 PDF 的编码坑:重音字符、连字与 (cid:xx) 乱码的解决方案
python·ai·pdf·机器翻译
量化吞吐机1 小时前
会写代码之后,量化学习还要补上交易判断
人工智能·python