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}

相关推荐
weixin_444012932 分钟前
CSS定位如何实现模态框垂直居中_使用负边距或transform
jvm·数据库·python
MediaTea6 分钟前
人工智能通识课:机器学习之无监督学习
人工智能·深度学习·学习·机器学习
2301_783848656 分钟前
Go 中实现高效图最大团划分的实践与边界分析
jvm·数据库·python
2401_884454157 分钟前
C#怎么实现Socket心跳包 C#如何在TCP Socket通信中设计心跳机制检测连接状态【网络】
jvm·数据库·python
码力斜杠哥11 分钟前
Rust初习录(6)Rust的 if 玩法
开发语言·python·rust
Jetev20 分钟前
不同品牌SSD对HTML函数工具加载速度影响大吗_存储测试汇总【汇总】
jvm·数据库·python
gf132111133 分钟前
python_【更新已发送的消息卡片】
java·前端·python
keineahnung234539 分钟前
PyTorch SymNode 為何找不到方法實作?──sizes_strides_methods 動態安裝機制解析
人工智能·pytorch·python·深度学习
2501_9010064742 分钟前
golang如何使用DTM分布式事务框架_golang DTM分布式事务框架使用方法
jvm·数据库·python
2501_901200531 小时前
Golang如何做Clean Architecture_Golang整洁架构教程【详解】
jvm·数据库·python